2018同济大学数据结构课程设计
仅作为备份与参考,不允许其他用途
项目简介:
考试报名工作给各高校报名工作带来了新的挑战,给教务管理部门增加了很大的工作量。本项目是对考试报名管理的简单模拟,用控制台选项的选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。
项目功能要求:
本项目的实质是完成对考生信息的建立,查找,插入,修改,删除等功能。其中考生信息包括准考证号,姓名,性别,年龄和报考类别等信息。项目在设计时应首先确定系统的数据结构,定义类的成员变量和成员函数;然后实现各成员函数以完成对数据操作的相应功能;最后完成主函数以验证各个成员函数的功能并得到运行结果。(建议采用链表实现)
项目内容
已知两个非降序链表序列S1和S2,设计函数构造出S1和S2的交集新链表S3。
项目功能要求:(要求采用链表)
-
输入说明:输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1表示序列的结尾(-1不属于这个序列)。数字用空格间隔。
-
输出说明:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
-
测试用例:
序号 | 输入 | 输出 | 说明 |
---|---|---|---|
1 | 1 2 5 -1 2 4 5 8 10 -1 | 2 5 | 一般情况 |
2 | 1 3 5 -1 2 4 6 8 10 -1 | NULL | 交集为空的情况 |
3 | 1 2 3 4 5 -1 1 2 3 4 5 -1 | 1 2 3 4 5 | 完全相交的情况 |
4 | 3 5 7 -1 2 3 4 5 6 7 8 -1 | 3 5 7 | 其中一个序列完全属于交集的情况 |
5 | -1 10 100 1000 -1 | NULL | 其中一个序列为空的情况 |
题目三 勇闯迷宫游戏
项目简介:
迷宫只有两个门,一个门叫入口,另一个门叫出口。一个骑士骑马从入口进入迷宫,迷宫设置很多障碍,骑士需要在迷宫中寻找通路以到达出口。
项目功能要求:
迷宫问题的求解过程可以采用回溯法即在一定的约束条件下试探地搜索前进,若前进中受阻,则及时回头纠正错误另择通路继续搜索的方法。从入口出发,按某一方向向前探索,若能走通,即某处可达,则到达新点,否则探索下一个方向;若所有的方向均没有通路,则沿原路返回前一点,换下一个方向再继续试探,直到所有可能的道路都探索到,或找到一条通路,或无路可走又返回入口点。在求解过程中,为了保证在达到某一个点后不能向前继续行走时,能正确返回前一个以便从下一个方向向前试探,则需要在试探过程中保存所能够达到的每个点的下标以及该点前进的方向,当找到出口时试探过程就结束了。
项目示例
题目四 表达式转换
项目内容:
算数表达式有前缀表示法,中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换成为后缀表达式。
项目要求:
-
输入说明:输入在一行中给出以空格分隔不同对象的中缀表达式,可包含+, -, *, /, -, *, /以及左右括号,表达式不超过20个字符(不包括空格)。
-
输出说明:在一行中输出转换后的后缀表达式,要求不同对象(运算数,运算符号)之间以空格分隔,但是结尾不得有多余空格。
-
测试用例:
序号 | 输入 | 输出 | 说明 |
---|---|---|---|
1 | 2 + 3 * ( 7 – 4 ) + 8 / 4 | 2 3 7 4 - * + 8 4 / + | 正常测试6种运算符 |
2 | ( ( 2 + 3) * 4 – ( 8 + 2 ) ) / 5 | 2 3 + 4 * 8 2 + - 5 / | 嵌套括号 |
3 | 1314 + 25.5 * 12 | 1314 25.5 12 * + | 运算数超过1位整数且有非整数出现 |
4 | -2 * ( +3 ) | -2 3 * | 运算数有正或负号 |
5 | 123 | 123 | 只有1个数字 |
题目五 银行业务
项目内容:
设某银行有A,B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍----即当A窗口每处理完2个顾客是,B窗口处理完1个顾客。给定到达银行的顾客序列,请按照业务完成的顺序输出顾客序列。假定不考虑顾客信后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口的顾客优先输出。
项目功能要求
-
输入说明:输入为一行正整数,其中第一数字N(N<=1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。
-
输出说明:按照业务处理完成的顺序输出顾客的编号。数字键以空格分隔,但是最后一个编号不能有多余的空格。
-
测试用例:
序号 | 输入 | 输出 | 说明 |
---|---|---|---|
1 | 8 2 1 3 9 4 11 13 15 | 1 3 2 9 11 4 13 15 | 正常测试,A窗口人多 |
2 | 8 2 1 3 9 4 11 12 16 | 1 3 2 9 11 4 12 16 | 正常测试,B窗口人多 |
3 | 1 6 | 6 | 最小N |
题目六 家谱管理系统
项目简介:
家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世袭繁衍和重要任务事迹的特殊图书体裁。家谱是**特有的文化遗产,是中华民族的三大文献(国史,地志,族谱)之一,属于珍贵的人文资料,对于历史学,民俗学,人口学,社会学和经济学的深入研究,均有其不可替代的独特功能。本项目兑对家谱管理进行简单的模拟,以实现查看祖先和子孙个人信息,插入家族成员,删除家族成员的功能。
项目功能要求:
本项目的实质是完成兑家谱成员信息的建立,查找,插入,修改,删除等功能,可以首先定义家族成员数据结构,然后将每个功能作为一个成员函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得到运行结果。
项目示例:
题目七 修理牧场
项目简介:
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一个很长的,能锯成N块的木头,即该木头的长度是Li的总和。
但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8,7和5的三段,第一次锯木头将木头锯成12和8,花费20;第二次锯木头将长度为12的木头锯成7和5花费12,总花费32元。如果第一次将木头锯成15和5,则第二次将木头锯成7和8,那么总的花费是35(大于32).
项目功能要求:
-
输入格式:输入第一行给出正整数N(N《104),表示要将木头锯成N块。第二行给出N个正整数,表示每块木头的长度。
-
输出格式:输出一个整数,即将木头锯成N块的最小花费。
项目示例:
题目八 电网建设造价模拟系统
项目简介
假设一个城市有n个小区,要实现n个小区之间的电网都能够相互接通,构造这个城市n个小区之间的电网,使总工程造价最低。请设计一个能够满足要求的造价方案。
项目功能要求:
在每个小区之间都可以设置一条电网线路,都要付出相应的经济代价。n个小区之间最多可以有n(n-1)/2条线路,选择其中的n-1条使总的耗费最少。
项目示例
题目九 关键活动
项目内容:
本实验项目是要求在任务调度问题中,如果还给出了完成每个字任务需要的时间,则可以算出完成整个工程项目需要的最短时间。在这些子任务中,有些任务即使推迟几天完成,也不会影响全局的工期;但是有些任务必须准时完成,否则整个项目的工期就要因此而延误,这些任务叫做“关键活动”。
请编写程序判定一个给定的工程项目的任务调度是否可行;如果该调度方案可行,则计算完成整个项目需要的最短时间,并且输出所有的关键活动。
项目功能要求:
-
输入说明:输入第1行给出两个正整数N(N《=100)和M,其中N是任务交接点(即衔接两个项目依赖的两个子任务的结点,例如:若任务2要在任务1完成后才开始,则两个任务之间必有一个交接点)的数量,交接点按1~N编号,M是字任务的数量,依次编号为1~M。随后M行,每行给出3个正整数,分别是该任务开始和完成设计的交接点编号以及完成该任务所需要的时间,整数间用空格分隔。
-
输出说明:如果任务调度不可行,则输出0;否则第一行输出完成整个项目所需要的时间,第2行开始输出所有关键活动,每个关键活动占一行,按照格式“v->W”输出,其中V和W为该任务开始和完成涉及的交接点编号。关键活动输出的顺序规则是:任务开始的交接点编号小者优先,起点编号相同时,与输入时任务的顺序相反。如下面测试用例2中,任务<5,7>先于任务<5,8>输入,而作为关键活动输出时则次序相反。
-
测试用例:
序号 | 输入 | 输出 | 说明 |
---|---|---|---|
1 | 7 8 1 2 4 1 3 3 2 4 5 3 4 3 4 5 2 4 6 6 5 7 5 6 7 2 | 17 1 –>2 2 –>4 4 –>6 6 –>7 | 简单情况测试 |
2 | 9 11 1 2 6 1 3 4 1 4 5 2 5 1 3 5 1 4 6 2 5 7 9 5 8 7 6 8 4 7 9 2 8 9 4 | 18 1 –>2 2 –>5 5 –>8 5 –>7 7 –>9 8 –>9 | 一般情况测试,单个起点和单个终点 |
3 | 4 5 1 2 4 2 3 5 3 4 6 4 2 3 4 1 2 | 0 | 不可行的方案测试 |
项目十 8种排序算法的比较案例 (必做)
项目简介:
随机函数产生一百,一千,一万和十万个随机数,用快速排序,直接插入排序,冒泡排序,选择排序的排序方法排序,并统计每种排序所花费的排序时间和交换次数。其中,随机数的个数由用户定义,系统产生随机数。并且显示他们的比较次数。
请在文档中记录上述数据量下,各种排序的计算时间和存储开销,并且根据实验结果说明这些方法的优缺点。
项目示例
考核方法:
每位同学选择其中的6个项目作为课程设计。所有项目最终提交时间是:1月4日18:00
作业提交内容包括:程序的可执行文件,项目源码,以及项目说明文档。
材料统一上交到学院的服务器上,命名规则是:
项目序号_学生学号_学生姓名.exe
项目序号_学生学号_学生姓名.cpp(或者项目序号_学生学号_学生姓名.java)
项目序号_学生学号_学生姓名.doc
成绩评定方法:
平时成绩 签到 20%。
项目可执行文件: 30%
项目源码: 20%
项目说明文档: 30%