数据结构课程设计报告公交换乘Word格式.docx
- 文档编号:14509651
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:37
- 大小:1.18MB
数据结构课程设计报告公交换乘Word格式.docx
《数据结构课程设计报告公交换乘Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告公交换乘Word格式.docx(37页珍藏版)》请在冰豆网上搜索。
录入与修改公交线路信息;
查询所有线路信息(线路名号、起点、终点、首末车时间、票价规则),按线路名或起点站名排序;
查询指定线路的详情(沿途站点、首末车时间、票价规则、站间距离等);
查询某一位置途经的所有公交线路、指定起点与终点,推荐乘车方案(如要求换乘次数最少、路线最短或无要求条件等)。
参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版).北京:
清华大学出版社,1997
[2]严蔚敏,吴伟民,米宁.数据结构题集(C语言版).北京:
清华大学出版社,1999
[3]博客园,华山大师兄的博客,最短路径——Dijkstra算法和Floyd算法
1引言.........................................................................................................................5...
1.1课题背景与意义5..
1.1.1公交出行5..
1.2国内外研究现状5..
1.3课程设计的主要研究工作6..
2系统需求分析与总体设计9..
2.1系统需求分析...............................................................................................9...
2.2系统总体设计9..
3系统详细设计1..0.
3.1有关数据结构的定义1..0
3.2主要算法设计.............................................................................................11
4系统实现与测试...................................................................................................18.
4.1系统实现1..8.
4.2系统测试2..0.
5总结与展望2..8.
5.1全文总结2..8.
5.1工作展望2..9.
6.附录2..9.
1引言
1.1课题背景与意义
1.1.1公交出行
公交出行是现在城市生活中必不可少的一种出行方式。
但往往由于线路四通八达,车次繁多,乘客众多,乘公交成了一件麻烦事。
公交查询与换乘推荐系统正是为了解决乘公交的诸多不便而产生的。
1.1.2图模型
图类型是一种重要的数据结构,而公交换查询与换乘推荐系统是图模型的典型应用。
在此系统中,将会模拟图中遍历,查找,最短路径搜索等重要操作,巩固图模型的各种操作。
1.2国内外研究现状
如今,公交出行方式已经较为成熟。
随着互联网时代的到来,各种查询系统也是一应俱全。
例如武汉市公交查询网站:
、上均有非常方便的查询服务提供。
国内外情况均是如此。
1.3课程设计的主要研究工作
主要内容:
首先要搜集武汉数武昌区公交线路站点信息。
(*由于十分复杂,使用完整的线路站点信息会导致数据料过于庞大且没有必要,故采用在武汉市地
铁交通图上选取一些具有代表性的线路的站点信息代替。
)其然后是进行系统总
体设计如下:
1.线路信息查询:
线路信息查询中要将所有线路的票价、首班时间、末班时间、途径所有站点等信息显示出来。
故需要根据已经初始化好的线路信息打印在屏幕上,按照邻接列表的存储顺序遍历图,一次打印途经站点的名字。
2.站点信息查询:
站点信息查询中,为了方便输入,提高效率,故先对所有站点编号显示在屏幕上供使用者查阅,根据编号输入需要查询的站点。
对每一个站点需要了解所在的所有线路,并分别显示该站点在该线路上的上一站和下一站,以及该线路的起点和终点。
如果该站点为起点或终点,则另作提示。
3.距离最短路线查询:
使用者对照站点名字与编号输入起点编号与终点编号,则通过程序得出两点间的最短距离以及沿途站点,并给出线路推荐。
当两站间有多条线路可以选择时,则给出提示。
该部分使用迪杰特拉斯最短路线算法,使用邻接矩阵的存储结构进行搜索。
Dijkstra算法说明如下:
1)算法思想:
设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合
(用S表示,初始时S中只有一个源点,以后每求得一条最短路径,就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),
第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。
在加入的过程中,
总保持从源点start到S中各顶点的最短路径长度不大于从源点start到U中任何顶点的最短路径长度。
此外,每个顶点对应一个距离,
S中的顶点的距离就是从start到此顶点的最短路径长度,U中的顶点的距离,是从start到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。
2)算法步骤:
a.初始时,S只包含源点,即S={start},start的距离为0。
U包含除v外的其他顶点,即:
U={其余顶点},若start与U中顶点u有边,
则<
u,start>
正常有权值,若u不是start的出边邻接点,则<
权值为∞。
b.从U中选取一个距离start最小的顶点k,把k加入S中(该选定的距离就是
start到k的最短路径长度)。
c.以k为新考虑的中间点,修改U中各顶点的距离;
若从源点start到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,
则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。
d.重复步骤b和c直到所有顶点都包含在S中。
在执行完迪杰特拉斯算法后,通过访问最短距离数组中的相应元素打印出最短距离。
然后对前驱结点编号数组进行调整,再遍历调整后的数组,从而输出途径的各站点。
最后根据两两站点间的抽象同路(即弧的邻接矩阵存储结构)进行搜索得出在哪条线路上,从而得出换乘推荐。
4.将数据写入磁盘:
本次设计的系统面向使用者,故所有初始数据都已经一数组的形式给出,主要包括:
图的邻接数组、弧权值数组、站点信息数组、站点编号与名称数组。
针对这四个数组,只需要设置四个文件指针,遍历数组的同时分别写入文件即可。
函数调用关系如下图1:
图1系统函数调用关系图
2系统需求分析与总体设计
2.1系统需求分析
用户需要知道是所有线路的信息,包括票价、首班时间、末班时间、沿途经过的所有站点;
由于线路可能很多,客户只需要知道摸个具体站点的信息的话,具体到每一个站点,则有站点所在的所有线路以及在相应线路上的上一站,下一站,以及相应的线路的起点终点;
客户需要的最重要的是乘车线路推荐,具体表现为输入起点和终点的编号要能够通过程序求出最短距离以及线路推荐。
2.2系统总体设计
针对以上需求,系统需要有初始化保存所有信息的功能,在这一部分中,将所有站点的名称、编号;
站点间的邻接关系、距离;
车次信息(包括票价、首班
时间、末班时间等)等信息初始化并保存,以备后续使用。
第二个是现实所有线
路信息,在这一部分中,要先建立抽象线路图,使用邻接列表的存储方式建立线路图,遍历图打印信息。
第三个是站点位置信息的获取,在这一部分总,主要是对图进行遍历,并查找得出所有位置信息。
第四部分是最优化路线推荐,在这一部分中主要使用迪杰斯特拉算法得出。
最后将所有的初始化信息写入磁盘即可。
3系统详细设计
3.1有关数据结构的定义
1.站点名称与编号结构:
保存站点名称与编号,名称使用字符串结构长度为20个字符:
charStation_name[20];
编号使用整型:
intStation_Num;
typedefstruct
{
charStaton_Name[20];
}Station_Num;
2.图结点结构:
有邻接点域,存放与改点相邻的顶点的编号,使用整型:
intVER_j_Num;
抽象站点的名称,使用字符串:
charStation_Name[20];
自引用指针域,指向相邻的下一个节点:
StructTableNode*next;
intVER_j_Num;
charStation_Name[20];
structTableNode*next;
}TableNode;
3.头结点结构:
抽象站点的名称,使用字符串:
抽象站点编号,整型:
头指针:
intStation_Num;
structTableNode*head;
}HeadNode;
4.图结构:
包含一个头结点结构数组:
structHeadNode[MAX_LINE_NUM];
typedefstruct
structHeadNode[MAX_LINE_NUM];
}MGraph;
5.线路信息结构:
线路编号,整型:
intLine_Num;
票价,浮点型:
floatprice;
首班时间的小时部分,整型:
intStart_Time_Hour;
首班时间的分钟部分:
整型:
intStart_Time_Minute;
末班时间的小时部分,整型:
intEnd_Time_Hour;
末班时间的分钟部分,整型:
intEnd_Time_Minute;
intLine_Num;
intStart_Time_Hour;
intStart_Time_Minute;
intEnd_Time_Hour;
intEnd_Time_Minute;
}Line_Info;
3.2主要算法设计
1.创建图模型:
在建立图模型时,按照线路的结构建立。
每一个起点作为一个头结点,每一条单链表代表一条线路。
故图的头结点数组长度为MAX_LINE_NU。
M此时要使用的辅助存储结构是线路的邻接数组。
遍历邻接数组,根据数组数据判断是否有下一结点并读取结点所代表的站点编号。
流程图如图2:
建立完成,退出;
是
建立头结点数组计数变量i,j
i越界?
否
Line_Num[i][j]有效?
否j越界?
是
开辟新的结点,一建立先进先出式链表;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 公交 换乘
![提示](https://static.bdocx.com/images/bang_tan.gif)