2010级计算机《数据结构与算法分析课程设计》题目
0、图的相关操作
a)键盘输入数据,建立一个有向图的邻接表,并输出。
b)建立一个有向图的十字链表。
c)在有向图的邻接表的基础上计算各顶点的度,并输出。
d)以有向图的邻接表为基础实现输出它的拓扑排序序列。
e)采用邻接矩阵存储一个有向图,求单源点到其它顶点的最短路径。
f)采用邻接表存储实现无向图的深度优先非递归遍历。
g)采用邻接表存储实现无向图的广度优先遍历。
h)采用邻接矩阵存储实现无向图的最小生成树的Prim算法。
i)在主函数中设计一个简单的菜单,分别调试上述算法。
j)为计算机专业设计教学计划:4个学年,每学年2个学期,开设50门课程,每学期所开课程门数尽量均衡,课程的安排必须满足先修关系。
1、二叉树的常见操作
a)输入字符序列,建立二叉链表。
b)中序遍历二叉树:递归算法。
c)中序遍历二叉树:非递归算法。
(最好也能实现先序,后序非递归算法)
d)求二叉树的高度。
e)求二叉树的叶子个数。
f)将二叉链表视为森林的孩子兄弟链表,计算森林中叶子个数。
g)建立中序线索二叉树,并实现中序遍历。
h)借助队列实现二叉树的层次遍历。
i)在主函数中设计一个简单的菜单,分别调试上述算法。
j)为N个权值设计哈夫曼编码。
k)编写一个五子棋的游戏程序:实现人与人对下的功能,并且有棋盘显示,每下一步均在棋盘上有状态显示。
2、试设计一个航空客运定票系统。
基本要求如下:
每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
系统能实现的操作和功能如下:
1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
若需要,可登记排队候补;
3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
实现提示:两个客户名单需分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且为了插入和删除方便,应以链表作为存储结构。
由于预约人
数无法预计,队列也应以链表作为存储结构。
3、查找的有关操作
1)建立一个有序表,采用折半查找实现某一已知的关键字的查找。
2)随机产生一组关键字,利用二叉排序树的插入算法建立二叉排序树,然后删除某一
指定关键字元素。
3)建立AVL树并实现删除某一指定关键字元素。
4)已知散列函数为H(key)=key%p(p为自定的常数),冲突处理方法分别为线性探
测法、链地址法实现散列表的建立
4、线性表的操作
要求各个功能分别用顺序表和线性链表实现。
1)创建一个线性表,并对其进行遍历。
2)编写在非递减有序表中插入一个元素使表元素仍有序的函数,并利用该函数建立一
个非递减有序表。
3)利用上述函数建立两个非递减有序表,并实现两个有序表的有序归并。
4)实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等,并能够实现
将数据存储到文件中)。
5)采用线性链表实现一元多项式的存储并实现两个多项式相加并输出结果。
5、一个国家发行n种不同面值的邮票,并假定每封信上至多只能贴m张邮票。
对于给定
的m、n、和这n种不同的面值,写一算法求出邮资从1开始在增量为1的情况下可能
获得的最大连续区域及获得此区域的各种可能面值的集合。
例1:n=2;m=4;邮票面值为1,4;邮资最大连续区域为10。
例2:n=4;m=5;邮票面值为1,4,12,21;邮资最大连续区域为71。
6、 钱币兑零问题:某国家有n 种面值的硬币,硬币的最小面值是1。
给出一定数额的纸币
X(x<100),使用动态规划方法,设计一个将X 兑换成相同数额硬币且使用最少硬币的方法。
例:硬币面值分别为:50分,30分,8分,5分,1分五种,纸币金额为66分,输出:50*1,8*2,共三枚硬币;纸币金额为65分,则输出:30*2,5*1,共三枚硬币。
7、 如果一个无向简单图G=<V,E>的所有顶点能划分成两个非空不交顶点集V1和V2,使
得对于图中的任意边e 都有:e 的两个端点分别属于V1和V2,则称G为二部图。
如下例左图就是二部图,它可画成右图形式。
设计一个算法,读入一个无向简单图的邻接矩阵,然后判断其是不是二部图。
8、 残缺棋盘问题:一个有2k ×2k (k>=2)个方格的棋盘,其中有一个方格残缺。
要求用L
形三格板(如图a )覆盖残缺棋盘,任意两个三格板不能重叠,也不能覆盖残缺方格,但必须覆盖其他所有的方格。
图b 所示为k=2时一个残缺棋盘及一个有效覆盖方案。
可以验证,所需要的三格板总数为( 2k ×2k -1 ) / 3,是一个整数。
用分治法设计一个覆盖残缺棋盘的解决方案。
9、 扑克牌游戏推广:以5 个不同的自然数作为操作数,以及另外一个自然数作为理想目标
数,对这5个操作数进行适当的算术运算,要求运算结果大于或等于理想目标数,并且希望所得结果是最优的,即结果要最接近理想目标数。
5个整数Mi, 1<=Mi<=100,表示操作数,整数T ,1<=T<=1000,表示理想目标数。
如果没有结果,输出提示信息,否则输出运算表达式及计算得到的最优结果;可以使用的运算只有:+, -, *, /,可以用()来改变运算顺序。
所有的中间结果必须是整数,所以一些除法运算是不允许的(例如:(2*2)/4 是合法的, 2*(2/4)是不合法的)。
例:输入:1,2,3,7,100,573
输出:(((100-1)*2)-7)*3,
573 图a :三格板
图b :k=2时的一种棋盘。