编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。
(1) 建立一个顺序表,含有n个数据元素。 (2) 输出顺序表及顺序表的长度。
(3) 在顺序表中删除值为x的结点或者删除给定位置i的结点。
(4) 将顺序表就地逆置,即利用原表的存储空间将线性表(a1,a2,...,an)逆置为
(an,an-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)在主函数中设计一个简单的菜单,分别测试上述算法。
综合训练:采用几组不同数据测试各个排序算法的性能(比较次数和移动次数)。
因篇幅问题不能全部显示,请点此查看更多更全内容