数据结构课程设计题目.docx
- 文档编号:6056206
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:11
- 大小:135.22KB
数据结构课程设计题目.docx
《数据结构课程设计题目.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计题目.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构课程设计题目
数据结构课程设计题目
一、基本要求
利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C语言或C++语言进行程序设计。
巩固和加深对线性表、栈、队列、字符串、树等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。
1、对现实复杂问题中的数据对象特性及组织方法进行分析和研究,设计适当的数据逻辑结构、存贮结构以及相应运算操作,把现实世界问题建模转化为计算机内部表示并进行处理。
2、采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。
也可根据自己对题目的理解增加新的功能模块(视情况可另外加分)。
3、系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。
4、程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。
5、编程风格良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等);
二、设计要点
1.设计和调试过程要规范化。
1)需求分析
根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?
分析出系统的所有功能。
2)逻辑设计
对问题描述中涉及的操作对象定义相应的数据类型,并设计相应的数据存储结构;(有些题目已经指定了数据存储的,按照指定的设计)
定义系统的各个模块,并给出模块之间的调用关系,设计各个模块的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。
3)详细设计
定义相应的存储结构并写出各模块以及各函数的伪码算法;
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。
4)程序编码
把详细设计的结果进一步求精为程序设计语言程序。
程序要按照写程序的规则来编写。
要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释,使程序中逻辑概念清楚。
5)调试与测试
采用自底向上,分模块进行,即先调试低层函数。
调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;
将调试过程截图到课程设计报告中。
6)编写课程设计报告
三、课程设计报告要求
(1) 不少于3000字,自己打印(A4纸)。
(2) 正文部分应该包括:
需求分析、逻辑设计、详细设计、测试与分析、总结、源程序清单。
(3) 设计报告严禁抄袭,否则按不及格处理。
四、课程设计题目
1.飞机订票系统
*问题描述:
通过此系统可以实现如下功能:
1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
2)查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
3)订票:
(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
4)退票:
可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)修改航班信息:
当航班信息改变可以修改航班数据文件
*要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
2.中缀表达式转后缀表达式,并利用后缀表达式求值[运算对象为多位数]
1)设计目的
Ø掌握栈“后进先出”的特点。
Ø掌握栈的典型应用——中缀表达式转后缀表达式、后缀表达式求值。
2)主要内容
中缀表达式转换为后缀表达式的步骤:
(1)定义一个运算符栈,输入一个中缀表达式(运算对象为整数,含有+、-、*、/、%及括号等运算符)。
(2)如果读入的是运算对象,则直接输出到后缀表达式。
(3)如果读入的是运算符,则比较该运算符和栈顶元素的优先级;若该运算符优先级高于栈顶元素的优先级,则直接进栈;若该运算符优先级低于或等于栈顶元素的优先级,则将栈中高于或等于该运算符优先级的元素先出栈并输出到后缀表达式,然后再将该运算符进栈。
(4)如果读入的是开括号“(”则直接进栈;如果读入的是闭括号“)”则一直出栈并输出到后缀表达式,直到遇到一个开括号“(”为止,开括号“(”和闭括号“)”均不输入到后缀表达式。
(5)重复
(2)(3)(4)步,直到读入中缀表达式结束符,然后将栈中剩余的所有运算符依次出栈并输出到后缀表达式。
后缀表达式求值的步骤:
(1)定义一个double型的运算对象栈,将中缀表达式转换得到的后缀表达式从左向右依次读入。
(2)如果读入的是运算对象,直接进入运算对象栈。
(3)如果读入的是运算符,立即从运算对象栈中弹出两个运算对象,计算两个运算对象运算后的值(先弹出的放后面,后弹出的放前面),并将计算结果存回运算对象栈。
(4)重复
(2)(3)步,直到后缀表达式结束,最后栈中保存的那个数即为该后缀表达式的计算结果
(5)检验程序运行结果的正确性。
假设输入中缀表达式为:
转换成的后缀表达式为:
后缀表达式求得的值为:
52
3.稀疏矩阵的运算
1)设计目的
Ø掌握稀疏矩阵的特点及其存储形式(每个非零元素用一个三元组结点形式存储,为零的元素隐含表示不用存储)。
Ø掌握稀疏矩阵的顺序存储及链式存储方法。
Ø掌握稀疏矩阵的简单运算(转置、加、减、乘、除/求逆)。
2)主要内容
(1)采用单链表形式存储稀疏矩阵中各个非零元素的值,其中单链表中的结点数据类型定义如下:
typedefstruct_node
{introw;//行号
intcol;//列号
intweight;//矩阵中的非零元素值
struct_node*next;
}Node;
(2)输入二维矩阵A、B、C,分别进行矩阵的加减乘除操作。
建立的单链表存储结构如下图所示:
矩阵A转置后的单链表存储结构如下图所示:
矩阵A和B相加之和矩阵的单链表存储结构如下图所示:
矩阵A和B相减之差矩阵的单链表存储结构如下图所示:
矩阵A和C相乘之积矩阵的单链表存储结构如下图所示:
矩阵B求逆之后的单链表存储结构略。
(3)将矩阵的转置、加、减、乘、求逆分别用函数实现,在主函数中分别调用以上函数进行验证。
4.多项式运算
1)设计目的
Ø
(1)掌握线性表的顺序存储结构和链式存储结构。
Ø
(2)掌握线性表插入、删除等基本运算。
Ø(3)掌握线性表的典型应用——多项式运算(加、减、乘、除[选做])。
2)主要内容
实现顺序结构或链式结构的多项式加减乘除运算。
如果多项式采用顺序结构,则多项式运算的最高次应能达到
。
例如,已知:
(1)相加结果:
(2)相减结果:
(3)相乘结果:
(4)相除结果:
;
如果采用顺序存储结构,则顺序表结点的数据类型定义如下:
typedefstruct_node
{floatcoe;//系数
intindex;//指数
}Node;
函数f(x)的顺序存储结构如下图所示。
图多项式的顺序表存储结构
如果采用链式存储结构,则链表结点的数据类型定义如下:
typedefstruct_node
{floatcoe;//系数
intindex;//指数
struct_node*next;
}Node;
函数f(x)的链式存储结构如下图所示。
图多项式的单链表存储结构
5.洗车仿真[队列的应用]
1)设计目的
Ø复习队列的存储和实现方法。
Ø掌握队列的实际应用。
Ø掌握文件读写的基本方法。
2)主要内容
假设洗车处有一个工作站,即一个“服务器”。
每个车需洗10分钟,队列中每次至多有5辆车等待洗车。
当正在清洗一辆车并且队列中有5辆车时,如果有一辆车到达,那么它将作为“溢出”不准入内且不计算在内。
平均等待时间是将每辆车的等待时间加起来再除以车的数量。
结束标记是-1。
下面是关于到达和离开的详细情况:
(1)如果当队列为空且没有车被清洗时,到达了一辆车,那么就马上开始清洗这辆车;它没有进入队列。
(2)每当一辆车通过10分钟的清洗后,它就马上离开洗车处,随之队头的车辆出队进入清洗过程。
(3)所有车辆的到达时刻从arrive.txt文件中读入,求出清洗车辆总数、清洗车辆等待的总时间、平均等待时间等信息写回arrive.txt文件后面。
(4)参与平均等待时间计算的车辆为所有参与清洗的车辆,不包括无等待位置并没有进入洗车处洗车的车辆。
图C3-1车辆到达时刻表及程序计算结果
6.
运动会分数统计
*问题描述:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
*功能要求:
1).可以输入各个项目的前三名或前五名的成绩;
2).能统计各学校总分,
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:
输入数据形式和范围,20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:
有中文提示,各学校分数为整形
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
*存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
7.停车场管理系统
设计目的:
1.掌握栈和队列的建立。
2.掌握栈和队列的基本操作。
3.深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们。
4.加深对栈和队列的理解和认识。
设计内容:
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。
每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
设计要求:
1.以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
2.每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
3.对每一组输入数据进行操作后的输出信息为:
若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费,功能可自己添加)。
8.约瑟夫(Joseph)环
设计目的:
1.掌握单向循环链表的建立。
2.掌握单向循环链表的操作。
设计内容:
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。
一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。
请设计一个程序求出出列顺序。
设计要求:
1.利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
2.测试数据:
m的初值为20,n=7,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?
3.输入数据:
建立输入函数处理输入的数据,输入m的初值n,输入每个人的密码,建立单向循环链表。
4.输出形式:
建立一个输出函数,将正确的出列顺序输出。
9.文章编辑
功能:
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"
(3)输出删除某一字符串后的文章;
10.图书管理系统
【问题描述】
设计一个计算机管理系统完成图书管理基本业务。
【基本要求】
1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;
2)对书号建立索引表(线性表)以提高查找效率;
3)系统主要功能如下:
*采编入库:
新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;
*借阅:
如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;
*归还:
注销对借阅者的登记,改变该书的现存量。
【进一步完成内容】
1)系统功能的进一步完善;
2)索引表采用树表。
3)设计内容
4)程序流程图
5)源程序
6)软件测试报告(包括所用到的数据及结果)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 题目