【巢湖学院】C/C++《数据结构与算法课程设计》(19题)[2025-02-20]
目录
题目1:基于链表的打飞机游戏的设计与实现
题目2:基于链表的宿舍信息管理系统的设计与实现
题目3:基于链表的通讯录管理软件的设计与实现
题目4:基于链表的职工管理系统设计与实现
题目5:基于链表的疫苗预防接种系统设计与实现
题目6:基于链表的运动会(赛事)管理系统设计与实现
题目7:基于栈(或队列)的停车场管理系统的设计与实现
题目8:文学研究助手与模式匹配算法KMP
题目9:基于二叉树的计算器应用系统的设计与实现
题目10:基于二叉链表的文件压缩系统的设计与实现
题目11:基于邻接矩阵(或邻接表的)的巢湖学院校园导航系统设计与实现
题目12:基于邻接矩阵的连连看游戏的设计与实现
题目13:基于邻接矩阵(或邻接表)的交通咨询系统设计与实现
题目14:基于邻接矩阵(或邻接表)的城市的通信网络的设计与实现
题目15:基于邻接矩阵(或邻接表)的地下迷宫的设计与实现
题目16:基于邻接矩阵的环巢湖旅游路线规划系统的设计与实现
题目17:基于散列表的电话号码查找系统的设计与实现
题目18:基于链表的航班信息的查询与订票系统设计与实现
题目19:排序综合
要求:有功能菜单;有读写文件;有合理的提示和人机交互;有统计或汇总功能;除基础算法外,对排序或查找算法选择较优方案。
题目1:基于链表的打飞机游戏的设计与实现
【设计要求】
掌握动态链表的使用,试设计编写一个游戏系统,要求如下:
- 飞机的种类和位置能随机产生;
- 鼠标击中飞机,则飞机消亡;
- 应包含但不限于飞机结构体、绘制飞机和背景、增加飞机、设置定时器、击中飞机、游戏升级、个人游戏历史记录、英雄排行榜等功能。
题目2:基于链表的宿舍信息管理系统的设计与实现
【设计要求】
1.信息导入:从文件中读取宿舍信息到线性表;
2.信息保存:将线性表中的宿舍信息和入住信息保存到文件中;
3.信息录入:按照宿舍信息,包括房间号、房间类型、房间内配置等;
4.宿舍入住信息管理:入住、换宿舍和入住结束退宿舍;
5.查询:根据宿舍号、学生名、专业、班级等查询相关信息;
6.修改:修改宿舍信息;
7.删除:从表中删除相关信息;
8. 统计:按专业统计入住情况等;
9. 输出宿舍信息和入住信息;
10.使用链式存储实现上述要求。
题目3:基于链表的通讯录管理软件的设计与实现
【设计要求】
1.信息导入:从文件中读通讯录信息到线性表;
2.信息保存:将线性表中的通讯录信息保存到文件中;
3.信息录入:录入通讯录信息,包括:姓名、性别、公司、电话1、邮箱、备注、群组、家庭住址、昵称、生日等(考虑电话可能不唯一);
4.查询:根据姓名、电话、群组等查询相关信息;
5.修改:修改通讯录信息;
6.删除:从表中删除通讯录信息;
7. 显示:显示所有通讯录信息;
8. 按姓名排序:显示通讯录中按姓名排序的顺序;
9. 分析与统计:统计好友人数、各群组人数、好友所在城市分布等。
题目4:基于链表的职工管理系统设计与实现
【设计要求】对单位的职工进行管理,包括插入、删除、查找、排序等功能。职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
1.新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。
2.删除一名职工:从职工管理文件中删除一名职工对象。
3.查询:从职工管理文件中查询符合某些条件的职工。
4.修改:检索某个职工对象,对其某些属性进行修改。
5.排序:按某种需要对职工对象文件进行排序。
【实现提示】职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。
1.由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。
2.对职工对象中的"姓名"按字典顺序进行排序。
3.对排序后的职工对象进行增、删、查询、修改、排序等操作。
4. 将职工对象按散列法存储,并设计解决冲突的方法。在此基础上实现增、删、查询、修改、排序等操作。
题目5:基于链表的疫苗预防接种系统设计与实现
【设计要求】
1.人员信息导入:从文件中读取人员信息到线性表;
2.信息保存:将线性表中的人员信息和接种信息保存到文件中;
3.人员信息录入:按照人员信息,包括姓名、身份证号、年龄、性别、所属区域等;
4.接种信息管理:接种、时间和疫苗名称;
5. 疫苗信息管理:名称、生产厂家、生产日期、保质期、数量等
6.疫苗接种预约:预约人、手机号、身份证号、预约日期等
7. 基本信息设置:
8.查询、修改、删除各类信息;
9. 统计:接种人数、剩余疫苗等;
10. 输出各类信息。
题目6:基于链表的运动会(赛事)管理系统设计与实现
【设计目的】
1.掌握结构体的表示和存储。
2. 掌握链表的存储和操作。
3.掌握文件的操作。
【设计要求】
任务:参加运动会有n个学校,学校编号为1……w。比赛分成m个男子项目,和n个女子项目。项目编号为男子1……m,女子m+1……m+n。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(w<=20,m<=20,n<=20)
功能:
- 可以输入各个项目的比赛成绩,并筛选出前三名或前五名的成绩保存至新建文件中;
- 能统计各学校总分;
- 可以按学校编号或名称、学校总分、男女团体总分排序输出;
- 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
- 数据存入文件并能随时查询;
- 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称
输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。
题目7:基于栈(或队列)的停车场管理系统的设计与实现
【设计目的】掌握栈和队列的建立。掌握栈和队列的基本操作。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们。加深对栈和队列的理解和认识。
【问题描述】设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。
【设计要求】以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费,功能可自己添加)。
【主要实现以下功能】
1.停车场车位划分
2.车辆进出管理及收费
3.停车场收费信息统计及分析
4.退出系统
题目8:文学研究助手与模式匹配算法KMP
【设计目的】
1.掌握结构体数组的表示和存储。
2.掌握线性表的存储和操作。
3.掌握文件的操作。
【设计要求】
- 具有图形菜单界面;
- 查找(BF、KMP),替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;
- 可正确存盘、取盘;
- 正确显示总行数;
- 输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、“数字个数”、“空格个数”、“文章总字数”(3)输出删除某一字符串后的文章。
题目9:基于二叉树的计算器应用系统的设计与实现
【设计要求】
掌握二叉树的应用,完成表达式求值。实现的计算器应具有如下基本功能:求解加/减/乘/除等基本运算以及带有括号的表达式。
- 利用用户输入的表达式,创建二叉树。
- 通过后序遍历计算表达式的值。
题目10:基于二叉链表的文件压缩系统的设计与实现
【设计目的】
1.掌握二叉树的概念和性质。
2.掌握任意二叉树存储结构。
3.掌握任意二叉树的基本操作。
4.掌握哈夫曼树的建树原理。
5.掌握哈夫曼树与哈夫曼码逻辑结构和存储结构。
6.掌握哈夫曼树与哈夫曼码的基本操作。
【问题描述】利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼编/译码系统。
【设计要求】一个完整的系统应具有以下功能:
- I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
- E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
- D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
- P:打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。
- T:打印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
(一)哈夫曼树与哈夫曼编码
1.读入英文文档,对其中的字符进行分析,得出字符(26个字母和各类标点符号等)出现的频度,输出结果。
2.使用字符出现的频度构造哈夫曼树。
3.确定和输出各字符的哈夫曼码,并进行文件的压缩。 - 将压缩文件进行解压,查看解压后的文件与原英文文档是否一致。
- 尝试以相同的原理去压缩处理一篇中文长篇小说。
(二)二叉树操作
1.已知二叉树的后序、中序序列,恢复此二叉树。
2.对二叉树进行层序、非递归中序遍历。
题目11:基于邻接矩阵(或邻接表的)的巢湖学院校园导航系统设计与实现
【设计要求】对巢湖学院校园导航系统的模拟,至少包括10个以上的场所,设计一个校园导航程序,为来访的客人提供各种信息的查询服务。
1.设计学校的校园平面图,所含地点10个以上。以图中顶点表示校内各地点,存放地点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.提供途中任意景点问路查询,即求任意两个景点间的一条最短的简单路径。
4.提供校园地图预览和最小连通地图。
【实现提示】一般情况下,校园的道路是双向通行的,可设计校园平面图是一个无向网。顶点和边均含有相关信息。
题目12:基于邻接矩阵的连连看游戏的设计与实现
[问题描述]
连连看游戏的基本游戏规则:
- 待连接的两个格子上的图形是相同的;
- 连线限定为水平或垂直直线,斜线则应转换为经过若干折点的水平/垂直直线的连线。
- 如果带连接的两个格子之间存在一条没有其他图形“障碍”并且折点不超过两个的路线,则消除这两个格子的图形,变成 空格子。
- 如果存在多条折点不超过两个的路线,首先选择折点最少得,其次在折点相同的情况下,要选择距离最短的那条路线。
【设计要求】 - 定义二维数组表示一张连连看的地图。
- 先判断待连接的两个结点连通情况
- 再寻找路径,可采用广度优先遍历也可采用深度优先遍历算法。
(其余功能,根据需要自己添加)
题目13:基于邻接矩阵(或邻接表)的交通咨询系统设计与实现
【设计目的】熟练掌握迪杰斯特拉算法和费洛伊德算法,能够利用它解决最短路径问题。
【设计内容】设计一个交通咨询系统,能让旅客咨询从任一个城市定点到另一个城市定点之间的最短路径或最低花费或最少时间等问题。对于不同的咨询要求、可输入城市间的路程或所需时间或所需花费。
【设计要求】建立交通网络网的存储结构(邻接矩阵和邻接表),提供程序测试方案。
题目14:基于邻接矩阵(或邻接表)的城市的通信网络的设计与实现
问题描述:在N(≥8)个城市间建立通信网络,需要架设n-1条路线。求解如何以最低的经济代价建设此通信网,这是一个最小生成树问题。这里要求使用Prim算法和Kruskal算法建立最小生成树,输入各城市的数目以及各个城市之间的距离。将城市之间的距离当做网中各点之间的权值。
【设计要求】
1.城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。
2.表示城市间距离网的邻接矩阵。
3.利用两种方法(Prim算法和克鲁斯卡尔(Kruskual))生成网中的最小生成树。最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。
4.求出任意两个城市之间通信的最短距离。
5.将n个城市设计为一个有向图,求出一组拓扑排序。
题目15:基于邻接矩阵(或邻接表)的地下迷宫的设计与实现
【设计内容】本设计解决陷入迷宫的老鼠如何找到出口的问题。老鼠希望尝试所有的路径之后走出迷宫,如果它到达一个死胡同,将原路返回到上一个位置,尝试新的路径。在每个位置上老鼠可以向8个方向运动,及东、南、西、北、东南、西南、东北、西北。迷宫只有一个入口、一个出口,设计程序输出迷宫的一条通路。
【设计要求】
1.设计迷宫的存储结构;采用深度优先策略,利用栈实现回溯算法。
2.设计迷宫的存储结构;采用广度优先策略,利用队列计算迷宫的一条最短通路。
3.由用户自由选择走迷宫路径。
4.界面为彩色界面,动态效果。
题目16:基于邻接矩阵的环巢湖旅游路线规划系统的设计与实现
【设计要求】需要访问环巢湖区域n个景点,只需保证连通即可,求最经济的访问方法。分别采用克鲁斯卡尔算法和普里姆算法求解。
1.先用环巢湖旅游景点创建一个图;
2.最小生成树的实现,求连通分量的实现
3.要求用邻接矩阵存储实现
题目17:基于散列表的电话号码查找系统的设计与实现
【设计目的】
1.掌握散列查找基本原理。
2.会创建散列表并进行查找。
3.掌握文件的操作。
【设计要求】设计散列表实现电话号码查找系统。
1.设每个记录有下列数据项:电话号码、ID号、地址、微信号、QQ号,紧急联系人。
2.分别以键盘录入和读取文件的方式输入各记录,分别以电话号码和用户名为关键字建立散列表。
3.分别采用线性探测方法和链地址法解决冲突。
4.查找并显示给定电话号码的记录。
5.查找并显示给定ID号的记录。
6.设计三种散列函数,比较冲突率。
7.在散列函数确定的前提下,再尝试二次探测法、伪随机数法处理冲突的方法,考察平均查找长度的变化。
题目18:基于链表的航班信息的查询与订票系统设计与实现
【设计目的】
- 深刻理解排序的定义和各种排序方法的特点,并能灵活的应用。
- 掌握描述查找过程的判定树的构造方法。
- 掌握文件的操作。
【设计内容】设计民航售票处的计算机系统可以为客户提供下列各项服务:1. 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行、最近一天航班的日期和余票额;2. 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况。
【设计要求】 - 对飞机航班信息进行排序和查找。
- 采用基数排序法对一组具有结构特点的飞机航班号进行排序。
- 利用二分查找法对排好序的航班记录按航班号实现快速查找。
录入:可以录入航班情况(文件读入和键盘录入,数据结构、具体数据自定)
查询:可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;另需提供改签功能;
退票:可退票,退票后修改相关数据文件,
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号;
修改航班信息:
当航班信息改变可以修改航班数据文件;
要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
题目19:排序综合
【设计要求】利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。
1.至少采用六种方法实现上述问题求解(直接插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序)。并把排序后的结果保存在不同的文件中;
2.统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法;
3.请将排序过程可视化显示,并能体现排序算法的稳定性。
其他选题:
推箱子游戏
俄罗斯方块游戏
扑克纸牌游戏
基于链表的贪食蛇游戏的设计与实现
基于栈的迷宫求解算法的设计与实现
基于二叉链表的二叉树可视化显示系统的设计与实现