数据结构与算法课程设计.docx
- 文档编号:10332984
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:29
- 大小:228.16KB
数据结构与算法课程设计.docx
《数据结构与算法课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构与算法课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
数据结构与算法课程设计
数据结构与算法课程设计
一、课程设计的目的、要求和任务
本课程设计是为了配合《数据结构与算法》课程的开设,通过设计完整的程序,使学生掌握数据结构的应用、算法的编写等基本方法。
〔1〕使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
〔2〕使学生掌握软件设计的基本内容和设计方法,并培养学生进行标准化软件设计的能力。
〔3〕使学生掌握使用各种电脑资料和有关参考资料,提高学生进行程序设计的基本能力;
〔1〕稳固和加深对数据结构基本知识的理解,提高综合运用课程知识的能力。
〔2〕培养学生自学参考书籍,查阅手册、图表和文献资料的能力。
〔3〕通过实际课程设计,初步掌握简单软件的分析方法和设计方法。
〔4〕了解与课程有关的工程技术标准,能正确解释和分析实验结果。
〔5〕题目具有足够的工作量。
二、课程设计的一般步骤
〔1〕划分课程设计小组:
由不超过3名同学组成一个课程设计小组,自愿组队。
〔2〕选题与搜集资料:
每个课程设计小组在参考选题中选择课题,并保证每人一题。
〔3〕分析与概要设计:
根据搜集的资料,进行程序功能与数据结构分析,并选择合适的数据结构、并在此基础上进行实现程序功能的算法设计。
〔3〕程序设计:
运用掌握C/C++语言编写程序,实现所有程序的各个模块功能。
〔4〕调试与测试:
调试程序,并记录测试情况。
〔5〕完成课程设计报告。
〔6〕验收与评分:
指导教师对每个同学的开发的系统进行综合验收。
三、任务完成形式
1.完整的软件系统
最终必须向指导老师提交完整的程序源代码(.c和.cpp以及.h为后缀的文件)、数据文件以及使用说明文件等。
源代码文件要特别注意编程标准、代码风格,关键代码需有合理的注释,不含任何无用代码;数据文件内要求有一定数量的“真实”数据〔如对于记录文件,需要有5条以上记录〕;使用说明文件的第一行,需要给出设计者的学号、,后面为其它说明。
2.课程设计报告
报告总体上主要包括以下几个部分,封面、目录、课程设计报告正文、使用说明、参考文献。
其中课程设计报告正文(12-20页之间,8000字以上),书写标准,应包括如下8个部分:
〔1〕问题描述:
描述要求编程解决的问题。
〔2〕功能要求:
给出程序要到达的具体的要求。
〔3〕算法思想:
描述解决相应问题算法的设计思想。
〔4〕模块划分:
描述所设计程序的各个模块〔即函数〕功能。
〔5〕数据结构:
给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义的抽象数据类型。
〔6〕核心源程序:
给出核心算法源代码,要求有充分的注释语句,至少要注释每个函数参数的含义和函数返回值的含义。
〔7〕测试数据:
设计测试数据,或具体给出测试数据。
要求测试数据能全面地测试所设计程序的功能。
〔8〕测试情况与结果分析:
给出程序的测试情况,并分析运行结果 。
四、成绩评定标准
学生成绩以优、良、中、及格和不及格5个等级评定。
其中:
〔1〕学生编写的实际软件和运行结果,占总成绩45%;
〔2〕设计报告,占总成绩45%。
〔3〕 小组合作情况,占总成绩的10%。
该部分由指导教师进行现场口试,依据表现给分。
只有程序验收通过后,才能按以下方法核定本次课程设计的总成绩。
以下几点是决定总成绩的关键因素:
(1)考勤、纪律、实验室卫生
(2)工作量〔代码量、功能多少、难度〕
(3)所用到的关键技术
(4)实用性、创新
(5)代码书写标准性
(6)程序界面美观、新技术运用得当
(7)个人答辩及小组合作情况
以下几种情形认定为成绩不合格:
(1)未能独立完成设计或概念不清;
(2)有效代码总量不足1000行(不含自动生成代码);
(3)“管理系统”类课题中使用现有数据库系统如access,SQLServer等;
(4)课程设计报告或源代码有抄袭行为;
(5)3次(含)以上点名未到;
(6)不遵守实验室规章制度,或不按要求完成实验室卫生工作。
五、附课程设计题目
1〕可另选题目,经指导老师认可后正式作为课程设计题目。
2〕数据结构课程设计参考题目
1.文件查重系统
[问题描述]
抄袭检查越来越成为一种重要的需求。
本问题要求,从文件中读入两个文件,比较其雷同字句的数目。
并给出详细对照。
当两字符串中连续相同字符的个数到达一定数目〔例如20字)可视为雷同。
也可按照相同字符占句子长度的比例来检测雷同。
[基本功能]
统计不同文件的雷同字段数,字段总长度,雷同字段比例。
[测试数据]
可自己定义。
[实现提示]
程序运行后首先要求用户给出制定的两个文件。
[高级要求]
建立文件库,对新的文件检测该文件与库中哪些文件雷同,并给出相应的比例。
2.课程设计案例管理系统
收集各本课程的题目案例,每个案例包括问题描述、基本功能要求、测试数据集、高级或扩展要求、课题实现源代码包、课程设计报告、评语等各部分。
[基本功能]
(1).案例导入或录入
(2).展示问题(3)展示案例结果(4)案例查询(5)单问题多解决方案入库的处理
3.约瑟夫环
[问题描述]
约瑟夫〔Joeph〕问题的一种描述是:
编号为1,2,„,n的n个人按顺时针方向围坐一圈,每人持有一个密码〔正整数〕。
一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
试设计一个程序求出出列顺序。
[基本要求]
利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。
[测试数据]
m的初值为20;密码:
3,1,7,2,4,8,4〔正确的结果应为6,1,4,7,2,3,5〕。
[实现提示]
程序运行后首先要求用户指定初始报数上限值,然后读取各人的密码。
设n≤30。
*
4.长整数运算
[问题描述]
设计一个程序实现两个任意长的整数求和运算。
[基本要求]
利用双项循环链表实现长整数的存储,每个结点含一个整型变量。
任何整型变量的范围是
-〔215-1〕~〔215-1〕。
输入和输出形式:
按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。
[测试数据]
〔1〕 0;0;应输出“0”。
〔2〕 -2345,6789;-7654,3211;应输出“-1,0000,0000”。
〔3〕 -9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。
〔4〕 1,0001,000;-1,0001,0001;应输出“0”。
〔5〕 1,0001,0001;-1,0001,0000;应输出“1”。
[实现提示]
〔1〕 每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。
但假设这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便。
故可以在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表视为万进制数。
〔2〕 可以利用头结点数据域的符号代表长整数的符号。
用其绝对值表示元素结点数目。
相加过程中不要破坏两个操作数链表。
两操作数的头指针存于指针数组中是简化程序结构的一种方法。
不能给长整数位数规定上限。
[选作内容]
修改上述程序,使它在整型量范围是-〔2n-1〕~〔2n-1〕的电脑上都能有效地运行。
其中,n是由程序读入的参量。
输入数据的分组方法可以另行规定。
5.多项式链式存储结构及其代数运算
[问题描述]
设计并建立一个链式存储分配系统来表示和操作多项式。
为了防止对零和非零多项式进行不同的处理,使用带头结点的循环链表。
为了充分利用多项式中不再使用的结点,维护一个可用空间表avail,把不再使用的多项式的结点链入其中。
当需要一个新结点时,就查看这个单链表avail。
如果表非空,那么可以使用它的一个结点。
只有当该表为空时,才使用动态存储分配来创建新结点。
[基本要求]
设计多项式的存储结构,编写并测试以下函数:
a) get_node和ret_node,从/向可用空间表申请和插入一个多项式结点。
b) pread,读取一个多项式,并将其转换成循环存储表示。
返回指向该多项式的头结点的指针。
c) pwrite,输出多项式,采用能够清楚显示的形式。
d) padd,计算d = a+b。
不改变a和b。
e) psub,计算d = a-b。
不改变a和b。
f) pmult,计算d = a*b。
不改变a和b。
g) eval,计算多项式在某点a的值,其中a是一个浮点型常量。
返回结果为浮点数。
h) perase,把存储表示为循环链表的多项式返还给可用空间表。
[实现提示]
为了进一步简化加法算法,把多项式的头结点的指数域设为-1。
*
6.稀疏矩阵的完全链表表示及其运算
[问题描述]
稀疏矩阵的每个结点包含down,right,row,col和value五个域。
用单独一个结点表示一个非零项,并将所有结点连接在一起,形成两个循环链表。
使得第一个表即行表,把所有结点按照行序〔同一行内按列序〕用right域链接起来。
使得第二个表即列表,把所有结点按照列序〔同一列内按行序〕用down链接起来。
这两个表共用一个头结点。
另外,增加一个包含矩阵维数的结点。
稀疏矩阵的这种存储表示称为完全链表表式。
实现一个完全链表系统进行稀疏矩阵运算,并分析以下操作函数的计算时间和额外存储空间的开销。
〔2〕设计目的
认识和掌握稀疏矩阵的完全链表表示;能够建立并运用这种存储结构 (3) 基本要求 建立一个用户友好、菜单式系统进行以下操作,并使用合当的测试数据测试该系统。
读取一个稀疏矩阵建立其完全链表表示 输出一个稀疏矩阵的内容 删除一个稀疏矩阵 两个稀疏矩阵相加 两个稀疏矩阵相减 两个稀疏矩阵相乘 稀疏矩阵的转置 〔4〕实现提示 链表上的操作。
*
7.实现简单数字图像处理
[问题描述]
一幅图像就是一个从位置集到颜色集的变换。
考虑二维图像,位置集实际上就是一个矩阵,此时一幅图像实际上就是一个内容为颜色矩阵。
如果颜色为0-255间的整数,表示该位置的灰度等级,0为黑色,255为白色,此时的图像称为灰度图。
而图像的处理就是在该矩阵进行相关计算。
一种常见的计算就是通过一点和周围8个点的信息共同决定该点的新值:
如一点的新值为该点和周围8点颜色值之和的均值,这一操作可用以下图表示。
显然这样处理后,图像会变得平滑,因此称为平滑操作。
显然将上述操作变为以下图时,就成为锐化操作。
要求实现假设干基本的图像处理操作。
[基本要求]
1熟悉Windows下BMP文件的格式,能够实现其读写(只考虑灰度图像)。
②实现图像的平滑和锐化操作,其它处理操作选做。
③需用VC++作为语言。
*
8.回文判断
[问题描述]
试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列。
其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。
例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
*
9.商品货架管理
[问题描述]
商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。
上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。
[基本要求]
针对一种特定商品,实现上述管理过程。
[实现提示]
用栈模拟货架和周转空间。
[测试数据]
由学生依据软件工程的测试技术自己确定。
注意测试边界数据,如空栈。
*
10.停车场管理
[问题描述]
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列〔大门在最南端,最先到达的第一辆车停放在车场的最北端〕,假设车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
[测试数据]
设n=2,输入数据为:
〔‘A’,1,5〕,〔‘A’,2,10〕,〔‘D’,1,15〕,〔‘A’,3, 20〕, 〔‘A’,4,25〕,〔‘A’,5,30〕,〔‘D’,2,35〕,〔‘D’,4,40〕,〔‘E’,0,0〕。
每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达;‘D’表示离去,‘E’表示输入结束。
[基本要求]
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:
假设是车辆到达,则输出汽车在停车场内或便道上的停车位置;假设是车离去;则输出汽车在停车场内停留的时间和应交纳的费用〔在便道上停留的时间不收费〕。
栈以顺序结构实现,队列以链表实现。
[实现提示]
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。
输入数据按到达或离去的时刻有序。
栈中每个元素表示一辆汽车,包含两个数据项:
汽车的牌照号码和进入停车场的时刻。
*
11.电梯运行仿真程序
[问题描述]
办公大楼有假设干层〔例如,十层〕,每层有电梯,同时有步行楼梯;
全楼有假设干部〔例如,不多于10部〕电梯同时供使用,电梯容量为24人,速度每上下一层需5秒,在某一层停下至少15秒。
其运行状态可分:
向上、向下、停止,当前乘客数,当前所在层数。
它设有一个“按钮数组”,例如第五层的按钮按下,意味着有乘客在第5层到达目标层,等等。
在楼的每一层,有电梯数,有按钮表示有人等待向上或向下,由假设干人在等待,有假设干电梯在本层停下,等等。
在大楼中〔包括进出〕的总人数不超过500 人,每个人站在电梯前有个目标层,他有一个最大的忍受等待时间,因为他可以选择电梯或是步行走楼梯,等等。
还有下面假设干假设:
在每个时间段要进大楼的人数在0~199 之间随机取值;
用电梯的每个人的目标层在1~10 之间取值;一个人在进电梯或改走楼梯之前的等待时间在180~360 秒范围内随机发生;一个人到达目标层后第二次再乘电梯中间的工作时间在400~6600 秒间随机取值。
[基本要求]
编写一个程序,模拟办公大楼中全部电梯的工作过程。
这个仿真程序可以用来监测系统运行情况,改善大楼管理,它也可以看成是一种游戏程序。
屏幕显示的布局设计
12.二叉树及其遍历
[问题描述]
建立一棵二叉树,并对其进行遍历〔先序、中序、后序〕,打印输出遍历结果。
[基本要求]
从键盘接受输入〔先序〕,以二叉链表作为存储结构,建立二叉树〔以先序来建立〕,并采用递归算法对其进行遍历〔先序、中序、后序〕,将遍历结果打印输出。
[测试数据]
ABCффDEфGффFффф〔其中ф表示空格字符〕
则输出结果为:
先序:
ABCDEGF 中序:
CBEGDFA 后序:
CGBFDBA
[选作内容]
采用非递归算法实现二叉树遍历。
2、打印二叉树结构
[问题描述]
按凹入表形式横向打印二叉树结构,即二叉树的根在屏幕的最左边,二叉树的左子树在屏幕的下边,二叉树的右子树在屏幕的上边。
[测试数据]
由学生依据软件工程的测试技术自己确定。
注意测试边界数据,如空二叉树。
3、打印树结构
[问题描述]
按凹入表形式打印树形结构。
[测试数据]
由学生依据软件工程的测试技术自己确定。
注意测试边界数据,如空树。
[实现提示]
〔1〕利用树的先根遍历方法;
〔2〕利用结点的深度控制横向位置。
*
13.图遍历的演示
[问题描述]
很多涉及图上操作的算法都是以图的遍历操作为基础的。
试写一个程序,演示无向图的遍历操作。
[基本要求]
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。
以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。
[测试数据]
由学生依据软件工程的测试技术自己确定。
注意测试边界数据,如单个结点。
[实现提示]
设图的结点不超过30个,每个结点用一个编号表示〔如果一个图有n个结点,则它们的编号分别为1,2,„,n〕。
通过输入图的全部边输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制。
注意,生成树的边是有向边,端点顺序不能颠倒。
*
14.学生选课系统
[问题描述]
大学里实行学分制。
每门课都有一定的学分。
每个学生均需要修满规定数量的课程才能毕业。
其中有些课程可以直接修读,有些课程需要一定的基础知识,必须在选了其他一些课程的基础上才能修读。
例如,《数据结构》必须在选修了《程序设计基础》之后才能选修。
我们称《程序设计基础》是《数据结构》的“先修课”。
假定每门课的直接先修课至多只有一门,两门课可能存在相同的先修课。
例如:
课程号 先修课号 学分
1 0 1
2 1 1
3 2 3
4 0 3
5 2 4
上例中,1是2的先修课,即如果要选修2,则1必定被选。
[基本要求]
学生不可能学完大学里开设的所有课程,因此每个学生必须在入学时选定自己要学的课程。
每个学生所修的学分数的下限是给定的。
现在编写一个“学生选课系统”,任意给定一种课程体系〔总课程数,课程之间的修读先后制约关系,学生毕业要求修的课程学分数〕,该系统能帮助学生找出一种选课方案,使得他所选课程数目最少,并获得毕业所需学分,并且必须满足先修课程优先的原则。
具体功能如下:
;
转换左孩子右兄弟二叉树表示; 3.在此基础上对二叉树进行先序、中序、后序遍历。
4. 给出选课方案。
*
15.设计一个哈夫曼码的编/译码系统
[基本要求]
该系统应具有以下功能:
〔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〕 编码结果以文本方式存储在文件CodeFile中。
〔2〕 用户界面可以设计为“菜单”方式:
显示上述功能符号,再加上“Q”,表示退出运
行Quit。
请用户键入一个选择功能符。
此功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。
〔3〕 在程序的一次执行过程中,第一次执行I,D或C命令之后,哈夫曼树已经在
内存了,不必再读入。
每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。
[测试数据]
〔1〕利用下面这道题中的数据调试程序。
某系统在通信联络中只可能出现八种字符,其概率分别为0.25,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计哈夫曼编码。
〔2〕用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:
“THIS PROGRAM IS MY FAVORITE”。
16.校园导游咨询系统
[问题描述]
设计一个校园导游程序, 为来访的客人提供信息查询服务。
[基本要求]
〔1〕设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息,以边表示路径,存放路径长度等相关信息。
〔2〕为来访客人提供图中任意景点相关信息的查询; 〔3〕为来访客人提供从校门口到图中任意景点的问路查询; *
17.推销员问题:
[问题描述]
有一个推销员要到N〔N>0〕个城市去推销产品,他从某个城市出发,经历每
个城市,且每个城市只能去一次,然后回到初始城市,以距离作为代价,他希望找出一个最正确路径。
这N个城市相互都有道路可通,但距离各不相同,城市个数和各个城市的相通距离可由学生自己设定。
[基本要求]
〔1〕可以输入城市个数〔不少于10个〕、输入城市信息和城市之间的距离〔为整数〕; 〔2〕按照输入出发城市,根据城市的距离最短给出路径选择。
〔3〕界面要求:
有合理的提示和人机交互。
*
18.全国交通咨询模拟
[问题描述]
处于不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅
途中的时间尽可能的短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供最优决策的交通咨询。
[基本要求]
〔1〕提供对城市信息进行编辑〔如:
添加或删除〕的功能;
〔2〕城市之间有两种交通工具:
火车或飞机,提供对全国城市交通图和列车时刻表及飞机航班表进行编辑的功能。
〔信息的输入方式可以是文件输入和键盘输入两种方式〕
〔3〕提供两种最优决策:
最快到达和最省钱到达。
〔选作:
旅途中转次数最少的最优决策〕
〔4〕旅途中消耗的总时间应该包括中转站的等候时间。
〔5〕咨询以用户和电脑的对话方式进行。
a〕由用户输入起始站、终点站、最优决策原则和交通工具;
b〕输出信息:
最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详
细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
19.关键路径问题
[问题描述]
设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。
[基本要求]
〔1〕对一个描述工程的AOE网,应判断其是否能够顺利进行。
〔2〕假设该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。
*
20.二叉排序树
[问题描述]
从键盘读入一组数据,建立二叉排序树并对其进行查找、遍历、格式化打印等有关操作。
[基本要求]
建立二叉排序树并对其进行查找,包括成功和不成功两种情况,并给出查找长度。
[测试数据]
由学生依据软件工程的测试技术自己确定。
注意测试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)