《数据结构与算法课程设计》任务书.docx
《《数据结构与算法课程设计》任务书.docx》由会员分享,可在线阅读,更多相关《《数据结构与算法课程设计》任务书.docx(13页珍藏版)》请在冰豆网上搜索。
《数据结构与算法课程设计》任务书
2011/2012学年第一学期
《数据结构与算法课程设计》任务书
一、设计目的
数据结构与算法课程设计是《数据结构与算法》课程教学必不可缺的一个重要环节,它可加深学生对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。
通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力,因而必须给予足够的重视。
二、设计题目
1.飞机订票系统
任务:
通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票:
可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
===================================================================
2.二叉树的中序、前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。
要求:
遍历的内容应是千姿百态的。
3.学生搭配问题(限1人完成)
一班有m个女生,有n个男生(m不等于n),现要开一个舞会.男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞,本曲没成功配对者坐着等待下一曲找舞伴.
请设计一系统模拟动态地显示出上述过程,要求如下:
1)输出每曲配对情况
2)计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的情况.至少求出K的两个值.
3)尽量设计出多种算法及程序,可视情况适当加分
===================================================================
4.车厢调度(限1人完成)
问题描述:
假设停在铁路调度站入口处的车厢序列的编号一次为1,2,3,4。
设计一个程序,求出所有可能由此输出的长度为4的车厢序列。
===================================================================
5.平衡二叉树的判定
设计要求:
给定一个二叉树的先序遍历或后序遍历结果,判定其是否为平衡二叉树。
===========================================================================
6.设计一个停车场管理系统,模拟停车场的运作
设计要求:
通过此程序具备以下功能:
1、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理;2、要求处理的数据元素包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻;3、该系统完成以下功能:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费);4、要求栈以顺序结构实现,队列以链表实现。
===========================================================================
7.简易电子表格
设计要求:
设计一个支持基本计算统计功能和其他一些表格管理/处理功能的计算机软件,使用户可在该软件的支持下,用交互方式进行表格建立、数据输入、数据编辑及其他一些表格操作。
二功能要求1.建立表格建立空白表格,同时在屏幕上显示,使其处于可输入数据状态。
2.输入数据与编辑数据通过键盘将数据输入到显示在屏幕上的电子表格上,同时要支持基本的数据输入编辑。
3.基本统计计算统计计算的种类包括:
合计、求平均、求最大/小统计计算方式:
表格按行/列统计计算表格按块统计计算 4.排序使任一行/列中的数据按大小(升或降)排列,对字符串型数据,还要可选大小写敏感。
5.表格保存 使电子表格存储在磁盘上(磁盘文件),并可随时读入,供继续处理。
6.数据复制将表格中任一块数据,复制到另一块中。
复制到目标快时,对目标快中原内容,可选择下列几种处理方式:
代替相加相减按条件替换7.公式支持单元格内可输入公式(表达式),使对应单元格的最终内容为公式的计算结果。
公式最基本的形式是算数计算公式。
公式中可以按名引用其他单元格。
===========================================================================
8.图的基本操作与实现(选作带“*”号的内容)
设计要求:
(1)自选存储结构,输入含n个顶点(用字符表示顶点)和e条边的图G
(2)求每个顶点的度,输出结果;
(3)指定任意顶点x为初始顶点,对图G作DFS遍历,输出DFS顶点序列(提示:
使用一个栈实现DFS);
(4)指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点序列(提示:
使用一个队列实现BFS);
(5)输入顶点x,查找图G:
若存在含x的顶点,则删除该结点及与之相关连的边,并作
DFS遍历(执行操作3);否则输出信息“无x”;
===========================================================================
9.图的算法实现
(1)将图的信息建立文件;
(2)从文件读入图的信息,建立邻接矩阵和邻接表;
(3)实现Prim、Kruskal、Dijkstra序算法。
===========================================================================
10.内部排序算法的性能分析
设计要求:
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。
(1)对起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较;
(2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:
关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动);
(3)输出比较结果。
(说明:
每个人选一个题目,一个题目最多选3)
11.运动会分数统计(限1人完成)
任务:
参加运动会有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)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
输出形式:
有合理的提示,各学校分数为整形
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
12.散列法的实验研究(限1人完成)
散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。
两者是影响查询算法性能的关键因素。
对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。
13.二叉排序树的实现(限1人完成)
用顺序和二叉链表作存储结构
1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排 序树T;
2)对二叉排序树T作中序遍历,输出结果;
3)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;
==========================================================================
14.最小生成树问题(限1人完成)
设计要求:
在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。
存储结构采用多种。
求解算法多种。
==========================================================================
15.哈夫曼编码/译码器(限1人完成)
【问题描述】设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。
【基本要求】
1)将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中)
2)分别采用动态和静态存储结构
3)初始化:
键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树;
4)编码:
利用建好的哈夫曼树生成哈夫曼编码;
5)输出编码;
6)设字符集及频度如下表:
字符空格ABCDEFGHIJKLM频度1866413223210321154757153220字符NOPQRSTUVWXYZ频度5763151485180238181161【进一步完成内容】
1)译码功能;
2)显示哈夫曼树;
3)界面设计的优化。
16.顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。
(限1人完成)
设有一元多项式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)要求输出结果的升幂和降幂两种排列情况
17.稀疏矩阵应用(限1人完成)
要求:
实现三元组,十字链表下的稀疏矩阵的加、转、乘的实现。
(1)稀疏矩阵的存储
(2)稀疏矩阵加法
(3)矩阵乘法
(4)矩阵转置
18.二叉平衡排序树(限1人完成)
问题描述:
从一棵空树开始创建,在创建过程中,保证树的有序性,同时还要针对树的平衡性做些调整。
最终要把创建好的二叉排序树转换为二叉平衡排序树。
基本要求:
1.创建(插入、调整、改组)
2.输出
19.构造可以使n个城市连接的最小生成树(限1人完成)
问题描述:
给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。
基本要求:
1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。
要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。
2、表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)
3、最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。
20.特殊矩阵的压缩存储算法的实现(限1人完成)
问题描述:
对于特殊矩阵可以通过压缩存储减少存储空间。
基本要求:
1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值;
2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值;
=================================================================
21.算术表达式的求解(限1人完成)
问题描述:
给定一个算术表达式,通过程序求出最后的结果。
基本要求:
1.从键盘输入要求解的算术表达式;
2.采用栈结构进行算术表达式的求解过程;
3.能够判断算术表达式正确与否;
4.对于错误表达式给出提示;
5.对于正确的表达式给出最后的结果;
======================================================================
22.病毒测试程序
本题的任务是:
当整个网络被感染后,计算有多少台机器被某个特定变种所感染。
输入要求:
输入由若干组测试数据组成。
每组数据的第1行包含2个整数M和N(1≤M,N≤500),接下来是一个M*N的矩阵表示网络的初始感染状态,其中的正、负整数的意义如题目描述中所定义。
下面一行给出一个正整数Q,是将要查询的变种的个数。
接下去的Q行里,每行给出一个变种的类型。
当M或N为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:
对每一组测试,在一行里输出被某个特定变种所感染的机器数量。
===============================================================
23.神秘国度的爱情故事
输入要求:
输入由若干组测试数据组成。
每组数据的第1行包含一正整数N(1≤N≤50000),代表神秘国度中小村的个数,每个小村即从0到N-1编号。
接下来有N-1行输入,每行包含一条双向道路的两端小村的编号,中间用空格分开。
之后一行包含一正整数M(1≤M≤500000),代表着该组测试问题的个数。
接下来M行,每行给出A,B,C三个小村的编号,中间用空格分开。
当N为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:
对每一组测试给定的A,B,C,在一行里输出答案,即:
如果C在A和B之间的路径上,输出Yes,否则输出No。
======================================================================
24.并查集:
检查网络
题目要求:
给定一个计算机网络以及机器间的双向连线列表,每一条连线允许两端的计算机进行直接的文件传输,其他计算机间若存在一条连通路径,也可以进行间接的文件传输。
请写出程序判断:
任意指定两台计算机,它们之间是否可以进行文件传输?
输入要求:
输入若干测试数据组成。
对于每一组测试,第1行包含一个整数N(≤10000),即网络中计算机的总台数,因而每台计算机可用1到N之间的一个正整数表示。
接下来的几行输入格式为IC1C2或者C或者CC1C2或者S,其中C1和C2是两台计算机的序号,I表示在C1和C2间输入一条连线,C表示检查C1和C2间是否可以传输文件,S表示该组测试结束。
当N为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:
对每一组C开头的测试,检查C1和C2间是否可以传输文件,若可以,则在一行中输出“yes”,否则输出“no”。
当读到S时,检查整个网络。
若网络中任意两机器间都可以传输文件,则在一行中输出“Thenetworkisconnected.”,否则输出“Therearekcomponents.”,其中k是网络中连通集的个数。
两组测试数据之间请输出一空行分隔。
===========================================================================
25.广义表的应用
由于广义表在结构上较线性表复杂得多,因此,广义表的运算也不如线性表简单。
本设计要求实现的广义表的建立、查找、输出、取表头和取表尾以及求深度、求逆表等。
本设计用一个主控菜单程序控制,共分为6个子系统。
(1).建立广义表
(2)输出广义表
(3)结点的查找
(4)求广义表表头
(5)求广义表表尾
(6)求广义表的深度
===========================================================================
三、课程设计的基本要求
1.问题分析和任务定义。
根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?
(而不是怎么做?
)限制条件是什么?
2.逻辑设计。
对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。
逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图。
3.详细设计。
定义相应的存储结构并写出各函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。
详细设计的结果是对数据结构和基本操作作出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架。
4.程序编码。
把详细设计的结果进一步求精为程序设计语言程序。
同时加入一些注解和断言,使程序中逻辑概念清楚。
5.程序调试与测试。
采用自底向上,分模块进行,即先调试低层函数。
能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。
调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果。
6.结果分析。
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
算法的时间、空间复杂性分析。
7.编写课程设计报告并提交相关内容
设计最终需提交的内容包括:
A)课程设计报告(1份,A4纸打印,同时包括一份电子版)
报告要求版面清晰,格式规范,否则重新编写。
报告内容要求包括:
(1)问题的概述、分析及研究意义;
(2)数据结构的逻辑设计和物理存储设计;(3)重要算法的设计、流程描述或伪代码描述;(4)数据结构的时空复杂性分析以及重要算法的复杂性分析;(5)程序最终实现结果(包括重点结果界面的抓取,能过说明问题的重要实验结果数据的打印或其可视化结果等)。
(6)参考文献(如果需要)。
(7)附录部分附上关键数据结构的定义及关键算法的源代码。
B)完整的程序系统(电子方式提交)
能够对输入产生相应的输出,同时尽量的完成可视化演示。
该部分包括源代码和可执行文件两个部分(提交的时候需清楚的注明个人姓名,班级)。
C)源程序文档(电子方式提交)
源程序代码要求结构清晰、可读性好。
应对源程序中的类说明(如果采用面向对象方法设计),函数说明,接口说明,关键变量说明等进行注释;源程序要进行适当的缩进编排。
D)答辩报告(编写PowerPoint答辩报告,电子方式提交)
要求突出重点,思路清晰。
同时就此报告准备答辩。
E)所有以电子方式提交的文件全部存在一个目录中,并对其进行压缩(用Winrar或Winzip均可),压缩后的文件按规定格式进行命名,命名格式为:
学号+姓名.rar(如0石海杭.rar)。
8.每位同学必须完成两个题目。
四、评分标准
1、基本功能:
50分。
通过功能的实现情况、界面的完成情况、软件的实现情况进行评分。
2、设计报告及使用说明书:
20分
按照报告的要求进行评分。
3、回答问题:
15分
4、平时考勤:
15分
5、核分标准:
100分
(90~100为优、80~89为良、70~79为中、60~69为及格、,60以下为不及格)
五、参考书目
刘玉龙.《数据结构与算法》.电子工业出版社.
严蔚敏.《数据结构》(C语言版).清华大学出版社
严蔚敏等《数据结构题集》(C语言版).清华大学出版社
徐孝凯.数据结构实用教程(C/C++描述).北京:
清华大学出版社.
陈慧南.数据结构(使用C++语言描述).南京:
东南大学出版社.
殷人昆,陶永雷,谢若阳等.数据结构(用面向对象方法与C++描述).北京:
清华大学出版社.