数据结构实验题目

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:顺序表的基本操作。

编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。

(1)建立一个顺序表,含有n个数据元素。

(2)输出顺序表及顺序表的长度。

(3)在顺序表中删除值为x的结点或者删除给定位置i的结点。

(4)将顺序表就地逆置,即利用原表的存储空间将线性表(a1,a2,...,a n)逆置为(a n,a n-1,...,a1)。

(5)将顺序表按升序排序。

(6)设顺序表中的数据元素递增有序,将x插入到顺序表的适当位置上,以保持该表的有序性。

(7)将两个顺序有序表A和B合并为一个有序表C。

(8)在主函数中设计一个简单的菜单,分别测试上述算法。

实验二:单链表的基本操作

编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作。

(1)建立一个带头结点的单链表。

(2)计算单链表的长度,然后输出单链表。

(3)查找值为x的直接前驱结点q。

(4)删除值为x的结点。

(5)把单向链表中元素逆置(不允许申请新的结点空间)。

(6)已知单链表中元素递增有序,请写出一个高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,他们的值可以和表中的元素相同,也可以不同)。

(7)同(6)的条件,试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法时间复杂度。(8)利用(1)建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。

(9)在主函数中设计一个简单的菜单,分别测试上述算法。

实验三:双向链表的基本操作

1.利用尾插法建立一个双向链表。

2.遍历双向链表。

3.实现双向链表中删除一个指定元素。

4.在非递减有序双向链表中实现插入元素e仍有序算法。

5.判断双向链表中元素是否对称若对称返回1否则返回0。

6.设元素为正整型,实现算法把所有奇数排列在偶数之前。

7.在主函数中设计一个简单的菜单调试上述算法。

实验四:栈和队列的基本操作

(1)采用链式存储实现栈的初始化、入栈、出栈操作。

(2)采用顺序存储实现栈的初始化、入栈、出栈操作。

(3)采用链式存储实现队列的初始化、入队、出队操作。

(4)采用顺序存储实现循环队列的初始化、入队、出队操作。

(5)在主函数中设计一个简单的菜单,分别测试上述算法。

综合训练:(1)利用栈实现表达式求值算法。

(2)利用栈实现迷宫求解。

(3)编写c语言程序利用队列打印一个杨辉三角形的前n行。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

实验五:二叉树的基本操作

(1)输入字符序列,建立二叉链表。

(2)先序、中序、后序遍历二叉树:递归算法。

(3)中序遍历二叉树:非递归算法。(最好也能实现先序、后序非递归算法)

(4)求二叉树的高度。

(5)求二叉树的叶子个数。

(6)借助队列实现二叉树的层次遍历。

(7)在主函数中设计一个简单的菜单,分别调试上述算法。

综合训练:

(1)为N个权值设计哈夫曼编码。

(2)试编写一个将百分制分数转换为五级分制的程序。要求其时间性能尽可能好(即平均比较次数尽可能少)。假设学生成绩的分布情况如下:

分数0-59 60-69 70-79 80-89 90-100

比例0.05 0.15 0.40 0.30 0.10

实验六:图的基本操作

(1)键盘输入数据,建立一个有向图的邻接表。

(2)输出该邻接表。

(3)在有向图的邻接表的基础上计算各顶点的度,并输出。

(4)以有向图的邻接表为基础实现输出它的拓扑排序序列。

(5)采用邻接表存储实现无向图的深度优先遍历。

(6)采用邻接表存储实现无向图的广度优先遍历。

(7)采用邻接矩阵存储实现无向图的最小生成树的PRIM算法。

(8)采用邻接矩阵存储一个有向图,输出单源点到其它顶点的最短路径。

(9)在主函数中设计一个简单的菜单,分别调试上述算法。

综合训练:为计算机专业设计教学计划:4个学年,每学年2个学期,开设50门课程,每学期所开课程门数尽量均衡,课程的安排必须满足先修关系。

实验七:排序的基本操作

输入一组关键字序列分别实现下列排序:

(1)实现简单选择排序、直接插入排序和冒泡排序。

(2)实现希尔排序算法。

(3)实现快速排序算法。

(4)实现堆排序算法。

(5)采用链式存储实现简单选择排序、直接插入排序和冒泡排序。

(6)在主函数中设计一个简单的菜单,分别测试上述算法。

综合训练:采用几组不同数据测试各个排序算法的性能(比较次数和移动次数)。

相关文档
最新文档