数据结构课程设计全国交通咨询模拟毕业论文.doc
《数据结构课程设计全国交通咨询模拟毕业论文.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计全国交通咨询模拟毕业论文.doc(133页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 .数据结构课程设计报告题目:全国交通咨询模拟目录一、实验题目1二、实验目的1三、实验环境1四、需求分析1五、总体设计1六、主程序流程3七、概要设计5八、调试分析7九、经验体会8十、用户说明9附录一、核心算法伪代码18附录二、测试数据20附录二、源代码21133 / 133一、实验题目从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。利用该系统实现两种最优决策:最快到达或最省钱到达。二、实验目的1. 充分了解并掌握最短路径问题与其应用。2.根据有向图的存储结构解决实际问题。三、实验环境此系统实现的主要操
2、作平台是VC+6.0,操作系统是WINDOWS7.四、需求分析1通过对题目的分析知,是要让我们能够通过利用所学的数据结构的基本知识和技能来解决程序设计问,因此在搞程序设计之前先好好的把书复习一遍,弄清楚各个知识之间的联系。2由题目的分析知全国交通咨询管理系统是有对城市信息的增加、删除、修改、保存、查询、有错时提示出错信息等功能,最后对数据进行保存并退出操作系统。由此可知需要将函数模块化,将它做为一个独立的函数体去实现它的功能。它可以分为四大功能模块,每个模块需要去各个击破。其中可能用到C语言的指针与链表,因此,要先去复习一下C语言课本。3根据这些功能和基本要求,可充分运用我们所学的数据结构的基
3、本知识和技能去逐步的解决。其中将函数进行模块化。在数据结构中,通过队列,栈,图的声明来实现系统的各种功能的存储各城市之间乘火车的消耗价格,时间,乘飞机的价格,时间,以与中转站最少。利用指针和结点来实现城市与城市之间各种操作,而这些知识点都是我们学习数据结构必须掌握和学会运用的。五、总体设计(1) 数据存储。城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。(2) 数据的逻辑结构。根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是
4、城市之间所耗费的时间(要包括中转站的等候时间)或旅费。(3) 数据的存储结构。采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。这里采用邻接表作为数据的存储结构。(4) 用不同的功能模块对城市信息和交通信息进行编辑。添加、修改、删除功能可用菜单方式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面。(5) 最优决策功能模块(fast or province)。 读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名与对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代
5、表的城市有交通联系的城市(代码、里程、航班、列车车次)。 根据具体最优决策的要求,用Dijkstra算法求出出发城市到其它各城市的最优值(最短时间或最小的费用),搜索过程中所经过城市的局部最优信息都保存在邻接表的表头数组中。其目的城市所代表的元素中就保存了所需的最优决策结果。这过程中,要用队列或栈保存局部最优决策值(局部最短的时间或最省的费用)变小的城市,其相应的初始值可为,并在表头数组对应的城市元素中保存响应的信息。开始时,栈(队列)中只有出发地城市,随着对栈(队列)顶(首)城市有交通联系的城市求得决策值(最短时间或最小的费用),若该值是局部最优值且该城市不在栈(队列)中,则进栈(队列),直
6、至栈(队列)为空,本题采用队列实现。 输出结果。从目的城市出发,搜索到出发城市,所经过的城市均入栈(队列),再逐一出栈栈(队列)中的城市,输出保存在表头数组中对应城市的信息(对方城市的出发信息,里程、时间、费用等)与最终结果。即输出依次于何时何地乘坐几点的飞机或火车于何时到达何地;最终所需的最快需要多长时间才能到达与旅费,或者最少需要多少旅费才能到达与时间。(6) 主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。详细设计思想: 本题所要求的交通系统是一个有向带权图结构,考虑到要求该系统有动态增加飞机和列车航班的功能,因而采用邻接表的形式存储:
7、对每个顶点建立一个单链表,单链表中的子结点表示以该顶点连接的弧,单链表中子结点的顺序可以按权值递增的顺序排列,表头结点按顺序存储。题目中提到要提供三种策略,最快到达,最省钱到达和最少中转次数策略,前两种策略采用迪杰斯特拉算法思想,其中最快到达的权值为到达两城市所需的最短时间,最省钱到达的权值为到达两城市所需的费用,后一种采用广度优先算法的思想,只需求的两城市所在的层数,就可以求的到达两城市所需的最少中转次数。 迪杰斯特拉(Dijkstra)算法的基本思想是:设置两个顶点的集合S和TVS,集合S中存放已找到最短路径的顶点,集合T存放当前还未找到最短路径的顶点。初始状态时,集合S中只包含源点v0,
8、然后不断从集合T中选取到顶点v0路径长度最短的顶点u加入到集合S中,集合S每加入一个新的顶点u,都要修改顶点v0到集合T中剩余顶点的最短路径长度值,集合T中各顶点新的最短路径长度值为原来的最短路径长度值与顶点u的最短路径长度值加上u到该顶点的路径长度值中的较小值。此过程不断重复,直到集合T的顶点全部加入到S中为止。下面讨论基于邻接表的存储结构求两点间最短路径的方法: 根据迪杰斯特拉(Dijkstra)算法所依据的原理:若按长度递增的次序生成从源点V0到其它顶点的最短路径,则当前正在生成的最短路径上除终点以外,其余顶点的最短路径均已生成(将源点的最短路径看作是已生成的源点到其自身的长度为0的路径
9、)。 按照这一思想,构造以下算法: 设S=S=U=,建立数组PATHn,用来存储V0到各终点的最短路径,初值均置为空集。建立数组BOOL Fn,Fi表示序号为i的表头结点的单链表中所有子结点已或未全部找到,初值置为FALSE。建立数组float distn,disti表示序号为i的表头结点到V0的最短权值(这里是时间或费用),显然distV0=0,其他顶点的dist初值置为。建立数组BOOL ISn,ISi表示序号为i的顶点是否在S中,初值均置为FALSE。 (1)VX=V0;最短的最短路径为PATH0=V0 (2)S=S+VX;(集合的并计算)ISVX=TRUE;S=S+VX ; (3)对S
10、中的所有顶点:do 由邻接表中该表头结点开始依次找单链表的下一子结点(沿链域指针依次访问);if(该子结点S)/IS该子结点的邻接点序号=TRUE if(子结点链域指针指向NULL)F=TRUE;S=S-该表头结点;break;else continue;else break;while(); 如F=FALSE,则U=U+该子结点;如果S=空集,则结束; (4)下一次短路径的终点必U。比较U中子结点到V0的dist值(其值为U中结点的弧的权值+其表头结点的dist值),由dist值最小的子结点的邻接点域确定次短路径的终点VX, PATH VX=PATH该子结点的表头结点+VX(集合的并计算)。
11、distVX=VX所属子结点的弧的权值+其表头结点的dist值。U=;如果VX为所要找的顶点,则结束;回到2执行。广度优先搜索遍历图类似于树的按层次遍历,其基本思想是:首先访问图中某指定的起始点Vi并将其标记为已访问过,然后由Vi出发访问与它相邻接的所有顶点Vj、 Vk,并均标记为已访问过,然后再按照Vj、Vk的次序,访问每一个顶点的所有未被访问过的邻接顶点,并均标记为已访问过,下一步再从这些顶点出发访问与它们相邻接的尚未被访问的顶点,如此做下去,直到所有的顶点均被访问过为止。六、主程序流程退出显示交通系统PrintGraph用户咨询UserDemand管理员管理Administer主函数ma
12、in()返回上一级菜单列车车次编辑Administer飞机航班编辑Administer城市编辑cityedit管理员管理Administer初始化交通系统initgraph返回上一级菜单最少中转次数TransferDispose最少旅行时间TimeDispose用户咨询UserDemand最少旅行费用ExpenditureDisposeUserDemand显示城市显示飞机航班显示列车车次返回上一级菜单显示交通系统PrintGraph文档键盘初始化交通系统initgraph删除城市新增城市城市编辑cityedit删除航班新增航班飞机航班编辑planeedit删除车次新增车次火车列次编辑train
13、edit七、概要设计系统用到的抽象数据类型定义:1ADT Graph数据对象V:一个集合,该集合中的所有元素具有一样的特性数据关系R:R=VRVR=|P(x,y)(x,y属于V)基本操作:(1)initgraph(&G);(2)CreateGraph(&G);(3)EnterVertex(&G);(4)DeleteVertex(&G);(5)EnterplaneArc(&G);(6)DeleteplanArc(&G);(7)EntertrainArc(&G);(8)DeletetrainArc(&G);ADT Graph2ADT LinkQueue数据元素:可以是任意类型的数据,但必须属于同一
14、个数据对象关系:队列中数据元素之间是线性关系。基本操作:(1)InitQueue(&Q);(2)IsEmpty(&Q);(3)EnterQueue(&Q,x);(4)DeleteQueue(&Q,&y);ADT LinkQueue3ADT TimeTree数据对象D:一个集合,该集合中的所有元素具有一样的特性数据关系R:若D为空,则为空树。若D中仅含有一个数据元素,则R为空集,否则R=H,H为如下二元关系:(1)在D中存在唯一的称为根的数据元素root,它在关系H中没有前驱(2)除root以外,D中每个结点在关系H下有且仅有一个前驱。基本操作:(1)CreateTimeTree(p,i,j,&
15、Q,infolist arcs);(2)CopyTimeTree(p,q);(3)VisitTimeTree(p);ADT TimeTree系统中子程序与功能要求:1 Administer(ALGraph *G):提供管理员管理城市交通系统的界面,通过该子程序可调用其他管理交通系统的子程序。2initgraph(ALGraph *G):初始化交通系统的子程序3createcityfile( ):创建城市文件的子程序4createplanefile( ):创班文件的子程序5createtrainfile( ):创建列车时刻表文件的子程序6LocateVertex(ALGraph *G,char
16、*v):提供城市名在城市交通系统中相应编号7CreateGraph(ALGraph *G):创建城市交通系统8cityedit(ALGraph *G):提供城市编辑功能9EnterVertex(ALGraph *G):提供在城市交通系统中加入城市的功能10DeleteVertex(ALGraph *G):提供在城市交通系统中删除城市的功能11flightedit(ALGraph *G):提供航班编辑功能12EnterplaneArc(ALGraph *G):提供在城市交通系统中加入航班的功能13DeleteplaneArc(ALGraph *G):提供在城市交通系统中删除航班的功能14:tra
17、inedit(ALGraph *G):提供列车车次的编辑功能15EntertrainArc(ALGraph *G):提供在城市交通系统中加入列车车次的功能16DeletetrainArc(ALGraph *G):提供在城市交通系统中删除列车车次的功能17UserDemand(ALGraph G):提供用户咨询的界面18DemandDispose(int n,ALGraph G):通过该子程序调用其他咨询子程序19InitQueue(LinkQueue *Q):初始化队列20EnterQueue(LinkQueue *Q,int x):入队操作21DeleteQueue(LinkQueue *Q
18、,int *x):出队操作22IsEmpty(LinkQueue *Q):队列判空操作23TransferDispose(int k,infolist(*arcs)MAX_VERTEX_NUM, (*arcs)MAX_VERTEX_NUM ,ALGraph G,ALGraph G,int v0,int v1):提供最少中转次数决策的功能 24MinExpenditure(infolist arcs,float *expenditure, float *route):提供两个城市之间最少费用的功能 25ExpenditureDispose(int k, infolist (*arcs)MAX_V
19、ERTEX_NUM,ALGraph G, int v0,int v1,float *D,int *final):提供最少费用决策的功能26MinTime(infolist arcs,float *time,float *route):提供两个城市之间最短时间的功能27TimeTreeDispose(Node *head,infolist (*arcs)MAX_VERTEX_NUM):提供两个之间相隔一个以上城市的城市间的最短时间的功能28CreateTimeTree(TimeTree p,int i,int j,LinkQueue*Q,infolist(*arcs)MAX_VERTEX_NUM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 全国 交通 咨询 模拟 毕业论文
限制150内