C/C++数据结构与算法课程设计参考选题(13题)[2024-06-30]

C/C++数据结构与算法课程设计参考选题(13题)[2024-06-30]

1.图书管理系统…1
2.学生信息管理系统…3
3.成绩管理系统…4
4.停车场管理系统…5
5.表达式求值…7
6.营业窗口模拟系统…9
7.迷宫求解…11
8.哈夫曼编/译码系统…12
9.管道敷设施工的最佳方案选择…14
10.全国交通咨询模拟…15
11.校园导航系统…17
12.农夫过河问题…18
13.基于不同策略的英文单词的词频统计和检索系统…20

源码联系UP主 -> https://space.bilibili.com/329101171

1.图书管理系统
设计目的
通过实践掌握综合运用数据结构知识(包括存储结构、查找、排
序、文件)和管理信息的综合能力,来解决实际问题的方法。
问题描述
实现图书管理系统,主要为图书管理员和借阅者提供信息管理和
借阅、查询服务。请使用文件和顺序表(或链表)分别作为外部与内部
存储,设计一个简易的图书管理程序。
基本要求
图书信息至少包括以下信息:书名,作者、出版社,入库时间、
库存量(图书馆购买此书的数目)借阅数(被借阅的本数),图书的信息
应存储在文件中。
图书管理员身份可以完成以下操作:
(1)录入:增加一本图书信息;
(2)删除:删除某一本图书的信息;
(3)修改:修改某一本图书的信息;
(4)查询:根据书名或作者等查询图书信息(可选择:简单条件
查询,组合条件查询等);
(5)排序:根据书名或入库时间等信息进行排序,尽可能提高
查找和维护性能
(6)为借阅者办理注册:借阅者身份确认;
(7)借书:借出一本书,该书的借阅量增加一本,库存减少一
本;
(8)还书:还回一本书,该书的库存增加一本;
(9)图书统计:统计所有的图书数目,即:所有图书之和;
(10)借阅量统计:统计所有借出的图书数目,即:所有图书借
阅量之和;

(11)输出:输出所有图书的所有信息,要求格式清晰,方便查
看;
借阅者身份可以完成以下操作:
(1)借阅者账号注册;
(2)查询:根据书名或作者等查询图书信息(可选择:简单条件
查询,组合条件查询等);
(3)借书:借阅者借书信息展示,同时借出一本书,该书的借
阅量增加一本,库存减少一本;
(4)还书:还回一本书,该书的库存量增加一本;
(5)统计:统计所有的借出的图书数目,即:该读者借阅量之
和;
(6)输出:输出该借阅者所借所有图书的信息,要求格式清晰,
方便查看。

2.学生信息管理系统
设计目的
通过实践掌握综合运用数据结构知识(包括链表的创建、插入、
删除、查找、排序、文件)和管理信息的综合能力来解决实际问题的
方法。
问题描述
学生信息包括:学院、专业、班级、学号、姓名、年龄、性别、
出生年月、地址、电话和E-mail、宿舍号、政治面貌等。试设计一
个学生信息管理程序,实现学生信息的电子化管理。要求:使用文件
方式存储数据,采用链表组织学生数据。
基本要求
系统应具有以下基本功能。
(1)系统以菜单方式工作。
(2)学生信息录入功能(学生信息用文件保存)–输入。
(3)学生信息浏览功能–输出。
(4)学生信息查询功能–按学号查询、按姓名査询。
(5)学生信息的删除与修改。
(6)学生信息的排序(按学号,按年龄等)。
(7)学生信息的筛选(可按学院、专业、年级、班级、性别、
政治面貌等)
注:可根据实际需求设计更多功能。
测试数据
学生可以根据自己的班级名册,任意截取一部分做为测试数据。

3.成绩管理系统
设计目的
通过实践掌握综合运用数据结构知识(包括存储结构、查找、排
序、文件)来解决实际问题的方法。
问题描述
给出n个学生的考试成绩表,成绩表包括学生的学号、姓名、考
试成绩(高等数学、英语、数据结构、算法分析与设计等),设计一个
简单的成绩管理程序。
基本要求
(1)建立成绩表,能够插入、删除、修改学生的成绩记录;
(2)按任一单科成绩排序;
(3)计算每名学生的平均成绩;
(4)统计任一单科成绩不及格的学生人数,输出不及格人数及
不及格的学生名单;
(5)根据平均成绩将成绩表按由高到低的次序排列,统计每名
学生的名次,分数相同的为同一名次,按名次输出成绩表;
(6)可根据学号或姓名查询学生成绩(可选择:简单条件查询,
组合条件查询等);
(7)成绩表保存在文件中,可以从文件读取数据。
注:可根据实际需求设计更多功能。
测试数据
学生可以根据自己班级的考试成绩单,任意截取一部分做为测试
数据。

4.停车场管理系统
设计目的
理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指
导解决实际问题的能力。
问题描述
设计一个停车场管理系统,模拟停车场的运作。
基本要求
(1)可查询停车场状态(停车位总数,已用停车位数量,空闲
停车位数量)。
(2)假设停车场有一个大门可供汽车进出,有n个停车位,汽
车在便道(入口)排队进场,在停车场内按车辆到达的先后顺序自选
空位停放。
(3)若车场内已停满n辆汽车,则后来的汽车只能在门外的便
道上等候。
(4)一旦停车场内有车辆开走,则排在便道上的第一辆汽车即
可进入。
(5)每辆车离开停车场时,应按其停留时间的长短缴纳费用(在
便道上停留的时间不收费)。
(6)管理员可查看当日停车情况(停车统计、详情及收益详情)。
(7)便道长度有限,当便道内车辆停满时,应提示后续车辆车
位已满,不要等待了。
(8)便道内等待车辆也可选择不再等待,直接离开,由于便道
是狭长的通道,在它之后的车辆必须先退出便道为它让路,待车辆驶
出便道,为它让路的车辆再按原次序进入便道。
实现提示
(1)为了便于区分每辆汽车并了解每辆车当前所处的位置,需
要记录汽车的牌照号码、汽车当前的状态(等待/驶入停车/驶出)、
进场时间,出场时间,停车时长,停车费用。

(2)为了便于停车场的管理,要为每个车位分配一个固定的编
号,占用状态(是/否)。
(3)当停车场的停车位上都已停满了汽车,又有新的汽车到来
时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺
次序放在便道上,为便道上的每个位置分配一个固定的编号。
(4)当便道中某车辆不想再等待时可提前离开,由于便道狭长,
比它后进便道的车要为它让路,而且当它开走之后让路的车还要按照
原来的停放次序再次进入便道,为完成这项功能,需使用队列和栈。
(5)收费标准可参考洛阳市停车收费标准。
(6)可参考学校门口的车辆出入口及校内停车位模拟实现。
运行与测试
(1)合理设计多组数据,验证所有的操作。
(2)随时检查停车位和便道的状态,不应该出现有空位而便道
上还有车的情况。
(3)便道车辆等待过程中异常离场情况。
(4)其它正常操作的一般情况。
设计完成后的思考

5.表达式求值
设计目的
通过实践掌握用栈来解决实际问题的方法。
问题描述
任何一个表达式都是由操作数(operand)、运算符(operator)和界
限符(delimiter)组成的。其中,操作数可以是常量,也可以是变量;
运算符可以是算术运算符、关系运算符和逻位算符;界限符是左、右
括号和标志表达式结束的结束符。在本课程设计中,仅讨论简单算术
表达式的求值问题,约定表达式中只包含加、减、乘、除4种运算,
所有的运算对象均为简单变量,表达式的结束符为“=”。
要求以字符序列的形式从终端输入语法正确、不含变量的整数表
达式。利用已知的运算符优先关系,实现对算术表达式的求值。
基本要求
这是一个利用栈结构完成的程序。为了实现运算符优先算法,需
使用两个工作栈,一个称为运算符栈(OPTR),用来寄存运算符;另
一个称为操作数栈(OPND),用来寄存操作数或运算结果。基本要求
如下:
(1)表达式中只包含加、减、乘、除4种运算,应按优先级进
行运算。
(2)表达式中不包含变量。
(3)操作数应为整数。
(4)操作数应包含1位数,2位数,3位数等不同数据。
(5)初始状态:操作数栈(OPND)为空栈,表达式结束符“=”
为运算符栈(OPTR)的栈底元素。
实现提示
假设算术表达式Expression内可以含有常量(0~9)和二元运算符
(+,-,*,/)。实现以下操作:
(1)ReadExpre(E):对以字符序列的形式输入语法正确的中缀

表达式并构造表达式E。
(2)EValuation():对算术表达式E求值。
(3)Compare(c1,c2):比较运算符优先级。
(4)Operate(a,optr,b):根据运算符optr进行操作数a和b的运
算。
(5)栈的相关操作(必须自己实现,不可使用现成的模板类)。

6.营业窗口模拟系统
设计目的
通过实践掌握用队列来解决实际问题的方法。
问题描述
设计一个营业窗口排队系统(银行、加油站、市民之家业务等服
务窗口),模拟一般营业窗口的日常对外业务,包括顾客到达、等待、
办理业务及离开等时间。要求体现“先来先服务”的原则,将传统物
理的多个顾客排队队列变为一个逻辑队列处理,顾客只需取票(即刻
进队,排队),等待叫号即可。
以下以银行排队叫号系统为例来描述,具体实现可自行选题。
基本要求
假设某银行有n个窗口开展对外接待业务,从早晨银行开门起不
断有顾客进入。顾客在人数众多时需要选择窗口排队,约定规则如下。
(1)顾客到达银行时能拿到排队号码,并能知道需要等待的人
数。如果是VIP顾客,那么直接进入VIP窗口办理,无需加入普通
顾客的等待队列。
(2)可以查看每个银行窗口正在给几号顾客办理业务。
(3)顾客离开银行时,可以对银行窗口职员的服务进行评价。
(4)系统可以查询业务量,显示办理过业务的顾客数。
实现提示
(1)随机产生顾客的到达时间和服务时间存盘(文件)。
(2)利用存盘数据实现队列的插入和删除。
(3)VIP顾客也需要在VIP队列进行排队。
(4)VIP窗口在没有人排队时也可以从普通队列中取队头进行
业务办理。
(5)顾客办理完业务离开时将该顾客从队列中删除,并提供让
顾客对银行窗口职员评价的平台。
(6)顾客不愿继续等待离开时将顾客从队列中删除。

7.迷宫求解
设计目的
通过实践掌握用数组和队列综合解决实际问题的方法。
问题描述
程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫
的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在
规定的时间内走到粮仓处。
要求
(1)老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;
(2)迷宫的墙足够结实,老鼠不能穿墙而过;
(3)正确检测结果,若老鼠在规定时间内走到粮仓处,提示成
功,否则提示失败;
(4)添加编辑迷宫的功能,可修改当前迷宫,修改内容:墙变
路,路变墙;
(5)找出走出迷宫的所有路径,以及最短路径;
(6)利用序列化功能实现迷宫地图文件的存盘和读出等功能。

8.哈夫曼编/译码系统
设计目的
通过对简单哈夫曼编/译码系统的设计与实现来熟练掌握树型结
构在实际问题中的应用。
问题描述
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传
输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对
待传数据预先编码,在接收端将传来的数据进行译码。系统应该具有
如下的几个功能:接收原始数据、编码、译码、打印编码规则。
数据结构设计
构造哈夫曼树时使用顺序表作为哈夫曼树的存储结构。
求哈夫曼编码时使用结构体数组存储哈夫曼编码信息。
功能(函数)设计
1.初始化功能模块
模块的功能为从键盘接收(或从文件读取)字符集大小n,以及
n个字符和n个权值。
2.建立哈夫曼树的功能模块
此模块功能为使用1中得到的数据按照构造哈夫曼树的算法构造
哈夫曼树,即将HuffNode数组中的各个位置的各个域都添上相关的
值,并将这个结构体数组存于文件中。
3.建立哈夫曼编码的功能模块
此模块功能为利用已建立好的哈夫曼树(如不在内存,则从文件
HufmanTree中读入),从文件A中读入相关的字符信息进行哈夫曼
编码,然后将结果存入文件B,同时将字符与0、1代码串的一一对
应关系打印到屏幕上。
4.译码的功能模块
此模块功能为利用已建立好的哈夫曼树将文B中的代码进行译码,
结果存入文件C中,同时将翻译的结果在屏幕上打印输出。

5.打印哈夫曼树
将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在
终端上,同时将此字符形式的哈夫曼树写入文件D中。
6.结果对比
对文件A与C进行比较,验证编码、译码是否正确。
界面设计
编码实现
运行与测试
1.利用下列数据调试程序:令叶子结点个数n为4,权值集合为
{1,3,5,7},字符集合为{A,B,C,D},并有如下对应关系,A——1、
B——3、C——5、D——7,调用初始化功能模块可以正确接收这些数
据;调用建立哈夫曼树的功能模块,构造静态链表HuffNode的存储;
调用建立哈夫曼编码的功能模块,在屏幕上显示如下对应关系:
A——111、B——110、C——10、D——0;调用译码的功能模块,输
入代码串“111110100”后,屏幕上显示译码结果:111110100——ABCD
2.自己准备一套测试字符串放入文本文件A中,统计文本文件A
中的字符频度,根据编码规则将A中字符串编码并放入文件B中,
再根据译码规则将B中编码解码并存入文件C中,对A与C中结果
进行对比。
算法分析
本课设主要用到3个算法。
1.哈夫曼编码。在初始化的过程中,要用输入的字符和权值建立
哈夫曼树并求得哈夫曼编码。先将输入的字符和权值放到一个结构体
数组中,建立哈夫曼树,将计算所得的哈夫曼编码存储到另一个结构
体数组中。
2.串的匹配。在解码的过程中,要对已经编码过的代码进行译码,
可利用循环,将代码中与哈夫曼编码长度相同的串与这个哈夫曼编码
进行比较,如果相等就回显并存人文件。
3.二叉树的遍历。在打印哈夫曼树的过程中,因为哈夫曼树也是
二叉树,所以就要利用二叉树的前序遍历将哈夫曼树输出。

9.管道敷设施工的最佳方案选择
设计目的
通过实践掌握用图来解决实际问题的方法。
问题描述
N(N>10)个居民区之间需要敷设煤气管道(通信网络)。假设任意
两个居民区之间都可以敷设管道,但代价不同。要求事先将任意两个
居民区之间敷设煤气管道的代价存入磁盘文件。设计一个最佳方案使
得这N个居民区之间敷设煤气管道所需代价最少,并将结果以图形
式在屏幕上输出。
基本要求
(1)从文本文件中读取任意两个居民区之间敷设煤气管道的代
价信息;
(2)根据文件读取内容构造无向图(顶点个数N>10);
(3)运用图的应用(最小生成树)选出最佳方案;
(4)输出最佳方案的代价;
(5)以边的形式输出最佳方案;
(6)以图形的方式输出最佳方案。

10.全国交通咨询模拟
设计目的
通过实践掌握用图(最短路径)来解决实际问题的方法。
问题描述
处于不同目的的旅客对交通工具有不同的要求。例如,因公出差
的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽
可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交
通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
基本要求
(1)提供对城市信息进行编辑(如:添加或删除)的功能。
(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻
表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:最快到达和最省钱到达。全程只考虑
一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。由输入起始站、终
点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能
到达或者最少需要多少旅费才能到达,并详细说明于何时乘坐哪一趟
列车或哪一次班机到何地。
测试数据:参考全国交通图,自行设计列车时刻表和飞机航班,
实现提示
(1)对全国城市交通图和列车时刻表及飞机航班表进行编辑,
应该提供文件形式输人和键盘输入两种方式。
(2)飞机航班表的信息应包括:航班号、起点站、终点站、起
航班期、起飞时间、到达时间、机型、票价;
(3)列车时刻表则需根据交通图给出各个路段的详细信息。
(4)以邻接表作为交通图的存储结构,表示边的结构内除含有

邻接点的信息外,还应包括交通工具、路程中耗费的时间和花费以及
出发和到达的时间等多种属性。
选作内容
增加旅途中转次数最少的最优决策。

11.校园导航系统
设计目的
通过实践掌握用图来解决实际问题的方法。
问题描述
设计一个校园导航系统,为来访的用户提供信息查询服务。
基本要求
(1)设计学校的校园平面图。选取若干个有代表性的地点并将
其抽象成一个无向带权图(无向网)。图中顶点表示校内各地点,边
上的权值代表各地点之间的距离(路径长度)或行进时间信息。图的
信息需在文件中存储。
(2)存放编号、地点名词、简介等信息供用户查询;
(3)为来访用户提供任意地点相关信息的查询;
(4)为来访用户提供图中任意地点之间的问路查询,显示全部
路径以及最短路径;
(5)为校园平面图增加、删除、更新有关地点和道路的信息。
选作内容:
(1)求多个景点的最佳游览路径;
(2)区分机动车道和人行道。

12.农夫过河问题
设计目的
通过实践掌握综合运用数据结构知识(图、队列、线性表、数组)
来解决实际问题的方法。
问题描述
一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸,他要
把这些东西全部运到北岸,他面前只有一条小船,船只能容下他和一
件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊
不能吃白菜;否则狼会吃羊,羊会吃白菜。所以农夫不能留下羊和白
菜自己离开,也不能留下狼和羊自己离开,而狼不吃白菜。要求给出
农夫将所有的东西运过河的方案。
问题提示
求解该问题的简单方法是一步一步进行试探,每一步搜索所有可
能的选择,对前一步状态如何的选择,再考虑下一步的方案。
模拟农夫过河需要对问题中每个角色的位置进行描述。可用4
位二进制数顺序分别表示农夫、狼、羊和白菜的位置。用0表示农夫
或者某某东西在河的南岸,1表示在河的北岸。问题变为从初始状态
二进制0000(全部在河的南岸)出发,寻找一种全部由安全状态构成的
状态序列,它以二进制111(全部到达河的北岸)为最终目标,并且在
序列中的每一个状态都可以从前一状态得到。为避免重复,要求在序
列中不出现重复的状态。
实现求解的搜索过程可采用广度优先搜索和深度优先搜索实现。
农夫过河问题的广度优先算法,把每一步所有可能的状态都放在
队列中,从队列中顺序取出分别进行处理,处理过程中再把下一步的
状态放在队列中……具体算法中需要用到一个整数队列moveTo,它
的每个元素表示一个可以安全到达的中间状态。还需要一个数据结构
记录已被访问过的的各种状态,以及已被发现的能够到达当前这个状
态的路径。构造一个包含16个元素的整数顺序表route来列举所有

16种状态(二进制0000到1111)。顺序表route的每个分量初始值为
-1,第i个元素记录状态i是否已被访问过,若已被访问过,则在这
个顺序表元素中记录前驱状态值。route的一个元素具有非负值表示
这个状态已访问过,或者正被考虑。最后,可以利用route顺序表元
素的值建立起正确的状态路径。
功能设计
1.确定农夫、狼、羊和白菜位置的功能模块。
用整数locate表示4位二进制数描述的状态。用4位二进制数
表示农夫、狼、白菜和羊,使用用位操作的“与”操作来考察每个角
色所在位置的代码是0还是1。函数返回值为真,表示所考察的角色
在河的北岸,否则在南岸。
2.确定安全状态的功能模块。
此功能模块通过位置分布的代码来判断当前状态是否安全。若状
态安全返回1,状态不安全返回0。
3.将各个安全状态还原成友好的提示信息的功能模块。
由于route表中存放整型数据,使用状态表把各个整数按照4
位二进制数的各个位置上的0、1代码所表示的含义输出成容易理解
的文字。附表1为测试结果。
步骤状态南岸北岸
0农夫狼羊白菜—
1狼白菜农夫羊
2狼农夫羊白菜
3农夫狼羊白菜
4羊农夫狼白菜
5农夫羊狼白菜
6—农夫狼羊白菜

13.基于不同策略的英文单词的词频统计
和检索系统
设计目的
通过实践掌握基于线性表、二叉排序树和散列表不同存储结构上
的查找算法;掌握不同检索策略对应的平均查找长度ASL的计算法
方法,明确不同检索策略的时间性能的差别,掌握排序算法。
问题描述
一篇英文文章(或C语言源程序等)存储在一个文本文件中,分别
基于线性表、二叉排序树和哈希表不同的存储结构,实现单词词频的
统计和单词的检索功能。同时计算不同检索策略下的ASL,通过比
较ASL的大小,对不同检索策略的时间性能做出相应的比较分析(在
课程设计报告中给出)。
基本要求
1.一篇包括标点符号的英文文章存储在文本文件InFile.txt中,
假设文件中单词的个数最多不超过5000个。从该文件中读取英文单
词,过滤掉所有的标点。
2.分别基于线性表、二叉排序树和哈希表不同的存储结构,实现
单词词频的统计和单词的检索功能。其中,线性表采用顺序表和链表
两种不同的存储结构分别实现顺序查找,同时实现基于顺序表的折半
査找;哈希表分别实现基于开放地址法的哈希查找和基于链地址法的
哈希查找。因此,总计实现6种不同的检索策略。
3.不论采取哪种检索策略,实现的功能均相同。
(1)词频统计。
当读取一个单词后,若该单词还未出现,则在适当的位上添加该
单词,将其词频计为1;若该单词已经出现过,则将其词频增加1。

统计结束后,将所有单词及其频率按照词典顺序写入文本文件中。其
中,不同的检索策略分别写人6个不同的文件。
基于顺序表的顺序査找:OutFile1.txt。
基于链表的顺序查找:0utFile2.txt。
基于顺序表的折半查找:OutFile3.txt。
基于二叉排序树的査找:OutFile4,txt。
基于开放地址法的哈希存找:OutFile5.txt。
基于链地址法的哈希在找:OutFile6.txt。
注:如果实现方法正确,6个文件的内容应该是一致的。
(2)单词检索。
输入一个单词,如果查找成功,则输出该单词对应的频率,同时
输出查找成功的平均查找长度和查找所花费的时间。如果查找失败,
则输出“查找失败”的提示。
(3)杜比分析。
计算不同检索策略下的平均查找长度ASL,通过比较ASL的大
小,对不同检索策略的时间性能做出相应的比较分析。
提示
不同的检索策略所采取的数据结构不一样,算法实现的过程不一
样,但查找结果是一样的。
选做
1.用窗体版界面取代控制台界面。
2.程序中所用到的排序算法选择先进的排序算法(快速排序或
归并排序或堆排序)。
3.实现低频词过滤功能,要求将出现频率(词频/单词总数)低于
10%的单词删除,可选择不同的存储结构分别实现(顺序表、链表、
哈希表、树表)。

源码联系UP主 -> https://space.bilibili.com/329101171

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值