C/C++2023级数据结构课程设计任务书(9题)[2024-06-07]

C/C++2023级数据结构课程设计任务书(9题)[2024-06-07]

2023级数据结构课程设计任务书
适用于计算机、NIIT
一、实验方式与基本流程
设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力,尽量独立完成。
(1)问题分析和任务定义
对问题的描述应避开具体的算法和涉及的数据结构,它是对要完成的任务作出明确的回答。强调的是做什么,而不是怎么做。
(2)逻辑设计和数据结构的选择
为操作对象定义相应的数据结构,以过程化程序设计的思想方法为原则划分各个模块,定义数据的抽象数据类型。
(3)详细设计和编码
算法的具体描述和代码的书写。
(4)上机调试
源程序的输入和代码的调试。
(5)撰写实习报告(严格参照模板撰写并统一上交!)

  1. 需求分析
    以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:输入的形式和输出、值的范围;输出的形式;程序所能达到的功能;测试的数据:包括正确的输入和错误的输入及其相应的输出结果。
  2. 概要设计
    说明程序中用到的所有抽象数据类型的定义,主程序的流程以及各程序函数模块 (鼓励画出函数的调用关系图以及核心步骤的流程图)。
    3.详细设计
    描述详细的核心函数(可用伪码描述)。
    4.使用说明
    陈述如何使用该程序完成结果的输出。
  3. 测试结果与分析
    内容包括:调试过程中遇到的问题并且是如何解决的以及对设计实现的回顾讨论和分析;算法的时间分析(包括基本操作和主要算法的时间复杂度的分析)和改进设想;列出测试结果,包括输入的数据和相应的输出数据。这里的测试数据应该完整和严格,最好多于需求分析中所列。
  4. 附录
    应附上带详细注释的源程序。

二、实验项目的设置与内容提要
本次课程设计有9个题目,可以在其中挑选1-2个题目完成(至少完成1个,请根据自己的能力选择相应的难度系数题,难度系数越大,权重越高)
除了提交完整的项目包(电子文档)以及课程设计报告(电子文档)外,最后还要打印一份课程设计报告的纸质稿交给指导老师,截止日期:6月5日(以上文档的收集、发送统一交由班级学委,请联系指导老师)。

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

1、算术表达式求值
问题描述:一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。
基本要求:从键盘读入一个合法的算术表达式,输出正确的结果;显示输入序列和栈的变化过程,操作数类型扩充到实数。
"(3.14159/2+sqrt(1/32+4)+1/22
ln(1/1.1*(2+sqrt(1/3^2+4))))*23.45@";
选作内容:扩充运算符集合;引入变量操作数;
核心存储结构:栈。
难度系数:★★★✬

2、 一元多项式计算
任务:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减和相乘,并将结果输出;
在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
设有一元多项式Am(x)和Bn(x).
Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm
Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn
请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)。
要求:

  1. 首先判定多项式是否稀疏
  2. 分别采用顺序和动态存储结构实现;
  3. 结果M(x)中无重复阶项和无零系数项;
  4. 要求输出结果的升幂和降幂两种排列情况

核心存储结构:单链表。
难度系数:★★★

3、哈夫曼编/译码器
要求:建立函数输入二叉树,并输出其哈夫曼树,可以提出算法的改进方法。
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。
[基本要求]
一个完整的系统应具有以下功能:
(1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
(2)E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
(3)D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
(4)P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。
(5)T:印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
[测试数据]
(1)利用下面这道题中的数据调试程序。
某系统在通信联络中只可能出现八种字符,其概率分别为0.25,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计哈夫曼编码。
(2)用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”。
字符 空格 A B C D E F G H I J K L M
频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20
字符 N O P Q R S T U V W X Y Z
频度 57 63 15 1 48 51 80 23 8 18 1 16 1
[实现提示]
(1)编码结果以文本方式存储在文件CodeFile中。
(2)用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示退出运行Quit。请用户键入一个选择功能符。此功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。
(3)在程序的一次执行过程中,第一次执行I,D或C命令之后,哈夫曼树已经在内存了,不必再读入。每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。

核心存储结构:二叉树。
难度系数:★★★★

4、学生成绩管理
实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。
能实现对学生信息的简单管理。
具体要求:
建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:
(1):信息输入(INPUT)
(2):总分统计(COUNT)
(3):总分排序(SORT)
(4):查询(QUERY)
其中:
(1):对4个学生的信息进行输入;
(2):对每个学生的3门课程统计总分;
(3):对4个学生的总分按降序排序并显示出来;
(4):查询输入一个学号后,显示出该学生的有关信息;
数据结构:
struct student
{
int num;//学号
char name[20];//姓名
int foxscore;//fox成绩
int cscore;//C语言
int englishscore;//英语成绩
struct student *next;
};
操作:1.成绩信息输入;
2.统计总分;
3.排序;
4.查询

存储结构:链式存储结构。
难度系数:★★★✬

5、图的D-搜索:
图的D-搜索类似于BFS,不同之处在于使用栈代替BFS中的队列,入、出队列的操作改为入、出栈的操作。即当一个顶点的所有邻接点被搜索之后,下一个搜索出发点应该是最近入栈(栈顶)的顶点。
①用邻接表作存储结构,写一个D-搜索算法。
②用D-搜索方法搜索下图,设初始出发点为1,写出顶点的访问次序和相应的生成树,当从某顶点出发搜索它的邻接点时,请按邻接点序号递增搜索,以使答案唯一。

难度系数:★★★★

6、排序实现:
有几个记录存储在带头结点的双向链表中,如下图所示。现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)

难度系数:★★★★

7、堆排序:
设有一大批需实时处理的数据元素组成集合S,实时处理开始后,每隔一极短的时间间隔便收到一个新的数据元素加入S。要求在每次接收一个新元素之前,找出S中现有的最小元素并将其输出(从S中删除)。试选择或构造一种适当的数据结构并设计一个算法及模拟程序,尽可能高效地完成上述任务。(要求用文字辅助说明算法的基本设计思想)。
提示:因为在每次接收一个新元素之前,只要求找出S中现有的最小元素并将其输出,而且在实时处理开始后,每隔一极短的时间间隔便收到一个新的数据元素加入S。考虑到堆排序在建初始堆后,每次加入一个元素最多只需2(k-1)次比较(k为堆的深度)。由此便得知应用堆排序的策略来解决。
数据结构:堆结构
难度系数:★★★✬

8、校园导游程序:
问题描述:用无向网表示海南大学校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。
基本要求:查询各景点的相关信息;查询图中任意两个景点间的最短路径;查询图中任意两个景点间的所有路径;增加、删除、更新有关景点和道路的信息。
选作内容:①求多个景点的最佳(最短)游览路径。
②区分机动车道和人行道。
③实现导游图的仿真界面。
数据结构:
typedef struct message
{
int num;//景点代码
char name[100];//景点名称
char pro[500];//简介
}Ciceroni;
Ciceroni school[10]={{1,“行政楼,办公的地方\n”},{2,“第1食堂,美味的地方\n”},{3,“老理工楼,计算机与网络空间安全学院所在地\n”},{4,“九教,实验楼计算机中心\n”},{5,“文科楼,法学管理等学院”},{6,“信息学院楼,老信息学院\n”},{7,“李云强楼,理工实验地\n”},{8,“田径一场\n”},{9,“三号教学楼,文化柱\n”},{10,“四号教学楼,南北两楼\n”}}; /景点名称和简介/
实现的操作:
/给景点之间的路径赋最大值/
/最短路径的C语言函数/
/输出最短路径和最短距离函数/
/输入景点代码查景点名称和简介/
/输入景点代码查到其它景点的最短距离/
难度系数:★★★★☆

9、停车场管理:
设停车场(如下图所示)内只有一个可停放几量汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已经停满几量汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆汽车即可开入;当停车场内某车辆要离开时,由于停车场是狭长的通道,在它之后开入车场的车辆必须先退出车场为它让路,待该车辆开出大门外后,为它让路的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走。试设计一个停车场管理程序(这里只是一个假想的停车场管理,并不代表实际的停车场管理)。


图 停车场示意图

提示分析:汽车在停车场内进出是按照栈的运算方式来实现的,先到的先进停车场;停车场的汽车离开停车场时,汽车场内其它汽车为该辆汽车让路,也是按栈的方式进行;汽车在便道上等候是按队列的方式进行的。因此,将停车场设计成一个栈,汽车让路也需要另一个栈来协助完成,汽车进出便道用队列来实现。
数据结构:本设计,栈采用顺序栈结构,队列用链式存储结构。
存储结构定义如下:
#define stacksize 10
typedef struct sqstack
{
int data[stacksize];
int top;
} SqStackTp;
typedef struct linked_queue
{
int data;
struct linked_queue * next;
}LqueueTp;
typedef struct
{
LqueueTp *front , *rear ;
} QueptrTp;

基本要求:
1)接受命令和车号,若是汽车要进停车场,先判断停车场栈是否满,若不满,则汽车入栈,否则汽车进入便道队列等候。
2)若是汽车要离开停车场,为给汽车让路,将停车场栈上若干辆汽车入临时栈,等这辆车出停车场后,临时栈中的汽车出栈,在回到停车场栈,然后看便道队列是否为空,若不空则说明有汽车等候,从队头取出汽车号,让该车进入停车场栈。
3)重复1),2)直到为退出命令(车号为0或负数)。

难度系数:★★★★☆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值