C/C++数据结构与算法分析课程设计(6题)[2024-05-31]

C/C++数据结构与算法分析课程设计(6题)[2024-05-31]

数据结构课程设计要求:
1. 学生课程设计期间必须严格遵守上机实验安排,按时上机,按时下机。
2. 学生课程设计结束后应上交设计报告。报告格式应符合要求。
3. 学生课程设计的成绩由答辩成绩、报告成绩和考勤成绩构成,超过4个学时不在实验室的学生,其成绩记为不及格。
4. 实验时间安排:


1设计目的
数据结构课程设计是学习了数据结构课程后的一个综合性实践教学环节,是对课程理论和课程实验的综合和补充。它主要培养学生综合运用已学过的理论和技能去分析和解决实际问题的能力,对加深课程理论的理解和应用、切实加强学生的实践动手能力和创新能力具有重要意义。
2设计要求
(1) 程序要添加适当的注释,程序的书写要采用缩进格式。
(2) 程序要具有一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告文档。
(5) 上交源程序和实验报告文档。实验报告文档命名:学号姓名班级,源程序文件夹名称同实验报告文档名称。
3设计内容
3.1线性表综合算法设计
设计一个信息管理系统,信息分别采用顺序存储和链式存储。定义一个包含若干数据元素的顺序表和链表,实现如下功能:
(1) 根据指定记录个数,逐个输入记录信息(信息表的创建);
(2) 逐个显示表中所有记录相关信息(信息表的输出);
(3) 根据某一关键字进行查找,返回该条记录的其他数据项(查找);
(4) 根据指定的位置可返回该条完整记录(取值);
(5) 给定一条记录信息,插入到表中指定的位置(插入);
(6) 删除指定位置的记录(删除);
(7) 统计表中记录个数(统计)。
系统不限,可自行选择,能进行上述操作即可。系统可以为学生成绩管理系统(学号,姓名,多门课程成绩)、图书管理系统(图书编号,图书名称,图书价格等)、通讯录系统(姓名,手机号码)、职工信息系统等。

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

可参考下面职工信息系统
[问题描述]
设有一职工信息管理系统,职工信息结构为:职工号(no)、姓名(name)、部门号(depno)、工资数(salary)、职工号指针(pno)、部门号指针(pdepno)和工资数指针(psalary)。设计一个程序,完成如下功能。
(1) 输入:添加一个职工记录。
(2) 输出:输出全部职工记录。
(3) 按salary排序:通过salary指针将职工记录按salary从小到大链接起来。
(4) 按salary输出:沿salary链输出全部职工记录。
(5) 全清:删除职工文件中的全部记录。
(6) 存储退出:将单链表的全部节点存储到职工文件中,然后退出程序运行过程。
[模块结构]
本程序的模块结构如图1所示:图中方块表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。

                            图1

DelAll(EmpType emp[ ], int &n):清除职工文件全部数据。
ReadFile(EmpType emp[ ], int &n):读数据文件并存入emp数组中。
SaveFile(EmpType emp[ ], int n):将emp数组存入数据文件。
InputEmpty(EmpType emp[ ], int &n):添加一个职工记录。
OutputFile(EmpType emp[ ], int n):输出职工文件全部记录。
Sortsalary(EmpType emp[ ], int n):采用直接插入法对emp[]按salary递增有序排列。
Dispsalary(EmpType emp[ ], int n):按psalary指针链输出。
结构类型为:
typedef struct node{
int no;
char name[10];
int depno;
float salary;
int *pno;
int *pdepno;
float *psalary;
}EmpType;

3.2停车场管理
[问题描述]
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达的时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在车场的最北端),若车场内已停满n辆车,则后来的汽车只能在门外的便道即候车场上等候,一旦有车开走,则排在候车场上的第一辆车即可开入。当车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。整个停车场的示意图如图2所示,试为停车场编写按上述要求进行管理的模拟程序。

                         图2

[基本要求]
以栈模拟停车场,以队列模拟车场外便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”(用1表示)或“离开”(用2表示)的信息、汽车牌照号码以及到达或离去的时刻。对每一组数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应缴的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以顺序循环结构实现。
[实现提示]
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。
用户输入的命令有3种:
(1) 汽车到达;
(2) 汽车离开
(3) 退出系统
[模块结构]

InitStack(SqStack &S ):初始化栈S;
StackEmpty((SqStack S):判断栈s是否为空;
StackFull((SqStack S):判断栈是否为满;
Push((SqStack &S,ElemType e):元素e进栈;
Pop(SqStack &S, ElemType &e ):出栈一个元素;
DispStack( SqStack &S):从栈顶到栈底输出元素;
InitQueue(SqQueue &Q):初始化队列Q;
QueueEmpty(SqQueue Q):判断队列是否为空;
QueueFull(SqQueue Q):判断队列是否为满;
EnQueue(SqQueue &Q,ElemType e):进队一个元素e;
DeQueue(SqQueue &Q, ElemType &e):出对一个元素;
结构类型定义:
#include <stdio.h>
#include <malloc.h>
#define N 3 /停车场内最多的停车数/
#define M 4 /候车场内最多的候车数/
typedef struct{
int CarNo[N]; /车牌号/
int CarTime[N]; /进场时间/
int top; /* 栈指针*/
}SqStack;
typedef struct{
int CarNo[M]; /车牌号/
int fear,rear; /对首和对尾指针/
}SqQueue; /定义循环队列类型/

3.3 学生成绩管理系统
[题目要求]
1. 用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
2. 具体要求:建立一个N个学生的信息登记表,每个学生的信息包括:学号,姓名,2 门课程的成绩(DataStructure,C,)和总分(SUM)。
3. 程序运行时显示一个简单的菜单,例如:

4. 根据菜单项从键盘输入数字(1-6)选择执行不同的功能,三个排序应采用不同的排序方法(直接插入排序、希尔排序、快速排序),在菜单中显式说明,并在执行对应的算法后,输出排序结果。
5. 输入数字6调用折半查找函数查找某一C成绩的记录并输出。
参考结构类型定义:
#define N 4
typedef struct {
int no;
char name[20];
int DataStructure;
int C;
int SUM;
}student;
typedef structure{
student STU[N];
int length;
}STUDENT;
[模块结构]

3.4 病毒感染监测
问题描述:
医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知他们的DNA序列都是环状的。现在研究者已收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了相应的病毒。为了方便研究,研究者将人的DNA和病毒DNA均表示成由一些字母组成的字符串序列,然后检测某种病毒DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了该病毒,否则没有感染。例如,假设病毒的DNA序列为baa,患者1的DNA序列为aaabbba,则感染;患者2的DNA序列为babbba,则未感染。(注意,人的DNA序列是线性的,而病毒的DNA序列是环状的。)
输入要求
多组数据,每组数据有1行,为序列A和B,A对应病毒的DNA序列,B对应人的DNA序列。A和B都为“0”时输入结束。
输出要求
对于每组数据输出1行,若患者感染了病毒输出YES,否则输出“NO”。
输入样例:
abbab abbabaab
baa cacdvcabacsd
abc def
0 0
输出样例
YES
YES
NO

3.5哈夫曼编码/译码的设计与实现
问题描述:
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,设计一个简单编码/译码系统,系统应具有如下功能:
1、 接收原始数据。
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树(输出哈弗曼树的存储结构的终态)。
2、 编码
利用已建好的哈弗曼树,对输入的正文进行编码,存储编码结果。
3、 译码
利用编码后的结果进行译码,存储译码结果。
4、 打印编码规则
即字符与编码的一一对应关系。
5、 打印哈夫曼树
将已创建的哈弗曼树输出到显示器上。

3.6简单校园导游程序的设计与实现
问题描述:
当人们到一个陌生的地方去旅游时,可能会找一个导游为自己在游玩的过程中提供帮助,导游可以介绍参观景点的历史背景等相关信息,推荐到下一个景点的最佳路径等。对于刚刚来到校园的新生,对校园环境不熟悉,一般都是高年级的学生充当“校园导游”的角色。一个成功的校园导游程序可以替代现实生活中的这些“校园导游”。试开发一个简单的校园导游程序,自行设置路线和景点,实现从学校门口出发,到校园的其他地方的最优路径。(任意两个地点的最短路径)
自行构建校园地图,顶点表示校园各个场所,应包含场所的名称、代号、简介等信息;边表示连接各个场所的道路,应包含道路的代号、路径长度等信息。
最优路径的输出格式自行确定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值