数据结构课程设计报告.docx
- 文档编号:5340118
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:12
- 大小:157.02KB
数据结构课程设计报告.docx
《数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告
滨江学院
数据结构课程设计报告
(2011--2012年度第2学期)
课程名称:
数据结构
题目:
公园的导游图
院系:
滨江学院计算机系
班级:
动漫
(2)班
学号:
20102359059
姓名:
郑强
指导教师:
李振宏
设计周数:
两周
日期:
2012年5月24日
目录
一.设计目的3
二、需求分析3
2.1选题的意义及背景3
2.2输入/输出形式和输出值的范围4
三.概要设计4
3.1设计思想4
3.2函数间的关系4
四、详细设计5
4.1哈夫曼的主要结构5
4.1.1结构定义5
4.1.2主要函数声明及功能描述6
4.2源程序7
4.2.1头文件7
4.2.2源文件8
五.程序测试结果及问题分析14
5.1程序测试结果14
5.2问题分析15
六.总结15
七.参考文献16
一.设计目的
数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。
因此,主要有三个方面的内容:
数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。
通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。
数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。
在当今信息时代,信息技术己成为当代知识经济的核心技术。
我们时刻都在和数据打交道。
比如人们在外出工作时找最短路径,在银行查询存款、通过互联网查新闻、以及远程教育报名等,所有这些都在与数据发生关系。
实际上,现实世界中的实体经过抽象以后,就可以成为计算机上所处理的数据。
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。
通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。
通过此次课程设计主要达到以下目的:
1、了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
2、初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3、提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
二、需求分析
2.1选题的意义及背景
程序要能够显示出地图,要能够查找出地图中任意两点间的最短距离,以及不重复遍历全图的最短路径,并且在查找及遍历的每个过程都在图中显示出暂时的结果,以便演示整过过程。
2.2输入/输出形式和输出值的范围
程序执行要求有描述地图的两个文件,并放到相应位置。
其中一个文件存放有描述地图各个景点之间距离的矩阵,另一个文件存有地图中各景点在显示器上显示的位置。
两个地图文件不允许有错误。
执行相应功能前要求先选择。
查找任意两点间的最短距离,要求输入要查找最短路径的两点。
在运行各个小过程后要求输出暂时结果。
四.概要设计
4.1程序模块
程序共有主模块、查找两点最短路径并输出具体过程、寻找不重复遍历全图图路径并输出遍历过程、三个模块。
主模块包含、载入地图、显示地图、功能选择与调用三部分。
查找两点最短路径并输出具体过程模块中的输出具体过程为显示地图模块
模块结构如图:
图2.1
4.2课题涉及的数据结构和数据库结构
程序主要用了图和栈两种数据结构,采用矩阵来保存图形结构的地图,用栈保存遍历时经过的结点用以遍历的回溯,以及存储最终路径。
图的抽象数据类型:
ADTGraph{
数据对象:
D={a1|1
数据关系:
R={
基本运算:
LoadImg(*g):
从相应文件中载入图数据初始化图g。
OutputImg(*g)把图输出到屏幕。
bestpath()不重复遍历图。
Floyed()计算图中所有点的两两最短路径。
}
栈的抽象数据类型:
ADTList{
数据对象:
D={ai|1≤i≤n,n≥0,}
数据关系:
R={
基本运算:
push(*s,e):
进栈:
将元素e查到栈s中作为栈顶元素。
pop(*s,*e):
出栈:
从栈s中退出栈顶元素,并将其值赋予e。
copsta(*s1,*s):
把栈s中的内容复制到栈s1。
}
四、详细设计
4.1采用C语言定义相关的数据类型。
图的定义:
typedefstruct
{
intedges[MAX][MAX];
intn;/*n顶点数*/
inte;/*e边数*/
}MGraph;
栈的定义:
typedefstruct
{
intbody[MAX];
inttop;
}Stack;
4.2写出各模块的类C码算法。
4.2.1读取地图:
把保存在文件中的地图数据载入到程序中相应的数据结构,图结构体g及顶点位置数组vl[][2]中。
voidLoadImg(intvl[][2],MGraph*g)
{
fp=fopen("g.g2","r");
fscanf(fp,"%d",&(g->n));
for(i=0;i
fscanf(fp,"%d%d",&vl[i][0],&vl[i][1]);
fclose(fp);
fp=fopen("g.g1","r");
for(i=0,g->e=0;i
for(j=0;j
fscanf(fp,"%d",&(g->edges[i][j]));
fclose(fp);
}
4.2.2显示地图:
把地图以图形方式输出到显示器。
voidOutputImg(intvl[][2],MGraph*g)
{for(i=0,g->e=0;i
for(j=0;j
{if(g->edges[i][j]!
=INF&&i {g->e++;画两点间路径; } } for(i=0;i 画景点; } 4.2.3不重复遍历全图的最短路径: 寻找从起点开始不重复走完所有景点的路径,如果该路径不存在,将提示。 如果存在将会最终找出符合要求的最短路径。 Step1: if(没遍历完) {if(向前有一景点没访问过)往下走; else {回溯到上一景点点(原景点之后景点变为没访问过); {if(遍历到起点且访问其以后景点必然与以前的试探路径相同) //说明路径不再存在; 若以前找到过遍历路径则输出最佳结果结束; else到Step1开始下一步搜索; } } else若比以前有的结果更好,则输出结果并继续试探更好的遍历方法; 4.2.4两点间最短路径: 采用弗洛伊德算法,求出每点间的最短路径,并在计算过程中输出用户所求两点间的暂时计算出的最短路径。 voidFloyed(MGraph*g,intA[][MAX],intpath[][MAX],intvl[][2]) { for(i=0;i for(j=0;j { A[i][j]=g->edges[i][j]; path[i][j]=-1; } 输入两景点; for(k=0;k {for(i=0;i for(j=0;j if(A[i][k]! =INF&&A[k][j]! =INF&&A[i][j]>(A[i][k]+A[k][j])) { A[i][j]=A[i][k]+A[k][j]; path[i][j]=k; } 输出0到k号顶点被考虑作为中间节点时两景点的最短路径图; } 4.3各函数的调用关系图、主要函数的流程图。 4.3.1函数调用关系图: 图3.1函数调用关系图 4.3.2主函数流程图: 图3.2主函数流程图 4.3.3查找两点最短路径函数Floyed()流程图: 图3.3查找两点最短路径函数流程图 4.3.4不重复遍历景点函数bestpath() 图3.4不重复遍历景点函数 五.程序测试结果及问题分析 5.1程序测试结果: 5.2问题分析: 程序调试中遇到了各种各样的问题,大部分是输入错误以及局部的逻辑混乱,或者某些地方考虑不周造成。 输入错误主要有等于写成赋值、缺少分号、符号->写成了减号-以及字符忘加引号等。 输入错误在编译时一般可以排除,编译时还没排除的错误以及逻辑错误一般要在调试运行时排除。 排除错误主要是通过在程序中加入大量输出函数,输出运行状态,然后根据输出结果定位出错位置,找出出错原因并解决问题。 但在中途还遇到过一些奇怪的问题,如函数执行完毕之后不能正常跳出。 我实在是找不到错在哪里,后来我改变了函数的结构,及程序的组织方式,问题终于没有了。 我自己觉得应该是对语言或编译环境的细节还了解得不够造成了这类问题不能解决。 六.总结 两周的课程设计中,碰到过许多问题。 首先,上课时听的理论知识,各种算法似乎很容易理解,但是在真正的运用过程中,并不能把理论知道很好的和实践结合起来。 在平时做实验时,尤其是这次课程设计,总感到有些无从下手。 因此,在学知识的过程中,一定要多动手、动脑,将所学的知识熟练掌握,自如运用。 其次,通过这次课程设计,对自己的逻辑思维能力是一个很大的锻炼,加强了我们的系统思考问题的能力,在编程方面,我们开始从整体的角度来考虑问题了,而不再像以前一样的,没有一个总体的概念。 也就是因为这种习惯,使自己在课程设计过程中浪费了不少的时间。 程序设计是一个毅力的考验过程。 有时候往往只是一个小小的错误,却要费很多的时间来解决。 在这个过程不能过于急躁,并且要很有耐心才行程序需要反复调试,其过程很可能相当令人头疼,有时花很长时间设计出来还是需要重做,那时心中未免有点灰心,有时还特别想放弃,此时更加需要静下心,查找原因。 在课程设计中,感谢老师的耐心指导,让我能能能够顺利写出程序并把程序更快的调试正确,我从中也学到了许多新的方法和知识。 感谢在做课程设计帮助自己的一些同学,是他们给我的意见和建议,让我的程序能够更加完善。 七.参考文献 [1]严蔚敏,吴伟民.《数据结构: C语言版》.北京: 清华大学出版社,2010.3 [2]陈维兴,林小茶.C++面向对象程序设计教程.北京: 清华大学出版社,2009.6 [3]谭浩强.C语言程序设计(第二版).北京: 清华大学出版社,2008.10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告