数据结构
文章平均质量分 77
而濡木染
不赶时间也奔跑
展开
-
单向链表的创建和遍历
由指针到结构体再到链表,学习过程循序渐进。创建一个先进先出的链表需要3个指针变量,而创建一个后进先出的指针链表只需要2个指针即可,C语言实现如下。一、先进先出链表的创建与遍历最终实现:输入需要创建的结点个数,并依次输入结点中所存储的数值(为了简便,结点只包括一个整形数据和一个指向下一个结构体的指针),并遍历输出第i个结点中所存储的数据。完整代码如下:#include #inc原创 2016-03-09 21:37:46 · 1354 阅读 · 0 评论 -
数据结构 用两个栈来模拟一个队列
请利用两个栈S1和S2来模拟一个队列。已知栈的三个操作定义如下:PUSH(ST,x),元素x入栈ST,POP(ST,X),ST栈顶元素出栈并赋给变量x;Sempty(ST),判断ST栈是否为空。那么利用栈的操作来实现该队列的三个操作:EnQueue,插入一个元素入队;DeQueue,删除一个元素出队;QueueEmpty,判队列为空。利用两个顺序栈进行模拟整个过程。代码实现及解释:原创 2016-04-25 21:36:35 · 1349 阅读 · 0 评论 -
单链表实现多项式的存储和加法
采用单向链表实现一元多项式的存储并实现两个多项式相加并输出结果。算法分析:不采用申请新节点的方法,要充分利用老节点。代码实现如下:#include #include #include using namespace std;typedef struct node{ int coef,exp; struct node *next;} JD,*Link原创 2016-04-17 17:28:51 · 4428 阅读 · 1 评论 -
数据结构实验1 线性表的有关操作
数据结构试验1 线性表的有关操作:操作要求: 1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)。 4.在单向链表中删除所有的偶数元素结点。 5.编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单向链表。原创 2016-04-12 17:04:50 · 1550 阅读 · 0 评论 -
数据结构实验四 图的有关操作
实验四 图的有关操作目的要求: 1.掌握图的存储思想及其存储实现。 2.掌握图的深度、广度优先遍历算法思想及其程序实现。 3.掌握图的常见应用算法的思想及其程序实现。实验内容: 1.键盘输入数据,建立一个有向图的邻接表。 2.输出该邻接表。 *3.建立一个无向图的十字链表。 4.在有向图的邻接表的基础上计算各顶点的度,并输出。原创 2016-05-29 12:31:38 · 3939 阅读 · 0 评论 -
数据结构 二叉排序树
随机产生一组关键字,利用二叉排序树的插入算法建立二叉排序树,然后删除某一指定关键字元素。代码实现:#include #include #include #include using namespace std;typedef int ElemType;typedef struct BSTNode{ ElemType data; struct BS原创 2016-05-29 17:21:59 · 1131 阅读 · 0 评论 -
排序之直接插入排序和折半插入排序
直接插入排序和折半插入排序#include #include #define Maxsize 100using namespace std;typedef int KeyType;typedef char* InfoType;typedef struct{ KeyType key; InfoType otherinfo;} RedType;t原创 2016-05-30 12:56:18 · 2595 阅读 · 0 评论 -
数据结构实验二 栈、队列
实验内容:1.采用链式存储实现栈的初始化、入栈、出栈操作。2.采用顺序存储实现栈的初始化、入栈、出栈操作。3.采用链式存储实现队列的初始化、入队、出队操作。4.采用顺序存储实现循环队列的初始化、入队、出队操作。5.在主函数中设计一个简单的菜单,分别测试上述算法。1.链式栈(相当于一个先入后出 的单链表)#include #include ///链式栈ty原创 2016-04-24 16:16:54 · 1152 阅读 · 0 评论 -
查找实验报告
查找的有关操作:一、实验目的1.掌握折半查找算法的思想及程序实现。2.掌握二叉排序树、AVL树的查找、插入、删除、建立算法的思想及程序实现。3.掌握散列存储结构的思想,能选择合适散列函数,实现不同冲突处理方法的散列表的查找、建立。 二、实验仪器及环境:PC计算机;windows XP操作系统、VisualC++6.0、codeblocks10.05三、实验内原创 2016-05-23 16:19:25 · 5190 阅读 · 0 评论 -
数据结构实验六排序
数据结构实验六排序#include #include #define Maxsize 100using namespace std;typedef int KeyType;typedef int InfoType;typedef struct{ KeyType key; InfoType otherinfo;} RedType;typ原创 2016-06-04 15:33:06 · 3362 阅读 · 1 评论 -
数据结构课程设计之哈夫曼编码模块
心血来潮只为完成一个完美的课程设计,下面算是单独的一个模块实现吧!但是为了拆分,我还是费了一些小心思的~因为开始调试好的代码,虽说没有华丽丽的页面,但基本的功能我还是都实现了的,包括哈夫曼编码、译码和从文件中读取还有向文件中写入,不求尽善尽美,但求问心无愧吧!但是在遇到拆分问题时,还是有时候需要好好考虑一下,比如全部变量的使用,最好不要未拆分之前,代码实现如下:#include原创 2016-07-07 17:15:24 · 5339 阅读 · 2 评论 -
深入理解C中的数组指针
代码说明一切:int main(void){ int nArr[5] = {1,2,3,4,5}; int n = 20; printf("nArr = %x\n", nArr); printf("&nArr = %x\n", &nArr); printf("&nArr = %x\n", &nArr[0]); print原创 2017-09-15 21:47:51 · 321 阅读 · 0 评论 -
数据结构二叉树的应用
1、二叉树相似性判断。试设计算法,判断两棵二叉树是否相似。所谓二叉树t1与t2相似,指的是t1和t2都是空的二叉树;或者t1的左子树与t2的左子树相似,同时t1的右子树与t2的右子树相似。2、求从二叉树根节点到r节点之间的路径。假设二叉树采用二叉链表方式存储,root指向根节点,r所指节点为任一给定的节点。编写算法,求出从根节点到节点r之间的路径。3、设二叉树按二叉链表原创 2016-04-25 19:21:24 · 1888 阅读 · 0 评论 -
数据结构 实验三 树与二叉树的常见操作
数据结构 实验三 树与二叉树的常见操作实验内容: 1.输入字符序列,建立二叉链表。 2.中序遍历二叉树:递归算法。 3.中序遍历二叉树:非递归算法。(最好也能实现先序,后序非递归算法) 4.求二叉树的高度 。 5.求二叉树的叶子个数。 *6.将二叉链表视为森林的孩子兄弟链表,计算森林中叶子个数。 *7.建立中序线索二叉树原创 2016-04-24 21:53:11 · 1939 阅读 · 0 评论 -
利用循环队列打印输出杨辉三角
对于计算机专业的童鞋来说,学习每一门专业课,打印杨辉三角总是一个亘古不变的话题,这不,连《数据结构》这么高大上的科目,也通过循环队列的实现来找上了我们。首先,先来大致解释一下什么是循环队列。回忆起学习一般的线性表和特殊的线性表—栈时,我们都是先去学习其顺序结构,因为顺序结构由于是物理结构和逻辑一致,好理解也好实现,掌握好顺序结构之后又去学习其链式结构。而学习队列时却恰恰相反,我们却先学习了链队原创 2016-04-04 10:32:50 · 10921 阅读 · 0 评论 -
单链表的应用2(单向循环链表变双向循环链表)
假设有一个单循环链表,其结点含有三个域pre、data、link。其中data为数据域;pre为指针域,他的值为空指针;link为指针域,他指向后继结点。请设计算法,将此表改成双向循环链表。代码实现:#include #include #include using namespace std;typedef struct node{ int data;原创 2016-04-04 19:26:25 · 3419 阅读 · 0 评论 -
单链表的应用3(链表排序输出)
设head是带头结点的单链表的头指针,试写算法,按递增次序输出单链表中各结点的数据元素,并释放结点所占用的存储空间。要求不允许用数组作为辅助空间。采用直接排序的方法,只借助于一个链表节点的空间,把链表按表内元素从小到大的顺序排好之后,按顺序输出即可。代码实现:#include #include #include using namespace std;typedef原创 2016-04-04 20:06:14 · 1451 阅读 · 0 评论 -
单链表的应用1(去重)
题目要求:在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。#include #include #include #include using namespace std;typedef struct node{ int data; struct node*next;} Linkli原创 2016-04-03 19:01:36 · 1090 阅读 · 0 评论 -
线性表的应用1(顺序表的遍历和查找)
已知顺序表L中的数据类型为整型。设计算法将其调整为左右两部分,左边的元素(即排在前面的)均为奇数,右边所有元素(即排在后面的)均为偶数,并要求算法的时间复杂度为O(n),空间复杂度为O(1)。由于顺序表的空间已经确定,所以可以遍历查找每个元素,判断其是否为奇数,并将其放入表的头部或者尾部代码实现:#include #include #include #define OVERFL原创 2016-04-05 17:35:52 · 6177 阅读 · 0 评论 -
线性表的应用2(删除顺序表中的元素)
写一算法,从顺序表中删除自第i个元素开始的k个元素。方法:循环控制删除即可代码实现:#include #include #include #define OVERFLOW -2#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量using namespac原创 2016-04-05 18:48:32 · 1392 阅读 · 0 评论 -
线性表的应用3(单链表的基本实现和逆置)
设计算法实现带头节点单链表的逆置。算法分析:整个过程中用到两根新引入的指针建立起一个拥有n个元素的单链表以后,首先用一根指针指向头结点,即把它记录下来,然后把头结点摘下来,并把其L->next指针域置空,然后再借助于另外一根指针,把原链表中的节点依次插入头结点的后面(每一次都是直接插到头结点后面哟~),即完成了链表中元素的就地逆置。代码实现:#include #include原创 2016-04-05 21:15:09 · 842 阅读 · 0 评论 -
线性表的应用4(链表节点的移动)
对单链表,编写算法实现以第一个元素为基准,将小于该元素的节点全部放到前面,大于该节点的元素全部放到后面。时间复杂度要求为O(n),不能申请新空间。算法分析:用两根指针实现的移动,由于是单链表,两根指针分别指向要移动的数据和要移动数据的前一个,如果该元素比首元素大,则不用管,直接向下移动指针即可,如果比首元素节点要小,则把该节点从原处删除,并把该节点插入到head后面,并把指针指回来即可。原创 2016-04-06 13:37:53 · 1864 阅读 · 0 评论 -
线性表的应用5(单链表实现二进制的加法)
建立一个带头节点的线性链表,用以存放输入的二进制数,链表中每个节点的data域存放一个二进制位。并在此链表上实现对二进制数的加1运算。算法分析:约定:以输入一个非0,1的数字作为一个二进制数的结束标志由于是单链表,即只能通过一个方向进行遍历,但是为了模拟加法操作,即必须要在表尾进行加1操作并要准确的考虑进位,所以我们利用链表的逆置,即先逆置,再加1,再逆置,即可方便的实现二进制数的加1原创 2016-04-06 14:39:45 · 709 阅读 · 0 评论 -
数据结构 利用循环队列层次遍历一棵二叉树 递归实现
利用循环队列层次遍历一棵二叉树 递归实现代码实现:#include ///循环队列实现层次遍历二叉树#include #include #define Maxsize 100#define OK 1#define OVERFLOW -2using namespace std;typedef char CElemType;typedef struct BiNode原创 2016-04-25 10:34:18 · 3470 阅读 · 0 评论 -
git用法总结
<一>如何把自己的代码上传到代码仓库中(ubuntu操作系统)1.sudo apt-get install git安装git,确保git在ubuntu本地已经安装2.ssh-keygen -t rsa -C 'pangzhennan_nefu@163.com'生成密钥,引号内为邮箱名称。之后会要求确认路径和输入密码,统一使用回车默认即可。成功后即会在~/下生成...原创 2019-03-13 14:22:35 · 264 阅读 · 0 评论