数据结构课程设计报告公交换乘.docx

上传人:b****2 文档编号:585173 上传时间:2022-10-11 格式:DOCX 页数:46 大小:562.41KB
下载 相关 举报
数据结构课程设计报告公交换乘.docx_第1页
第1页 / 共46页
数据结构课程设计报告公交换乘.docx_第2页
第2页 / 共46页
数据结构课程设计报告公交换乘.docx_第3页
第3页 / 共46页
数据结构课程设计报告公交换乘.docx_第4页
第4页 / 共46页
数据结构课程设计报告公交换乘.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告公交换乘.docx

《数据结构课程设计报告公交换乘.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告公交换乘.docx(46页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告公交换乘.docx

数据结构课程设计报告公交换乘

课程设计报告

题目:

武昌地区公交查询与换乘推荐

课程名称:

数据结构课程设计

专业班级:

学号:

姓名:

指导教师:

报告日期:

 

计算机科学与技术学院

任务书

设计内容

掌握图、查找、排序等数据结构的物理存储结构与基本算法,通过解决较复杂的基于图模型的实际问题,提高学生对数据结构知识综合运用的技能与实践能力。

设计要求

(1)从互联网或相关资料获取可靠的武汉公交线路及其地理数据,通过线性结构与图模型对其进行表示,且以文件保存。

(2)图形方式显示上述图模型与求解结果。

(3)界面友好,实现的功能包括:

录入与修改公交线路信息;查询所有线路信息(线路名号、起点、终点、首末车时间、票价规则),按线路名或起点站名排序;查询指定线路的详情(沿途站点、首末车时间、票价规则、站间距离等);查询某一位置途经的所有公交线路、指定起点与终点,推荐乘车方案(如要求换乘次数最少、路线最短或无要求条件等)。

参考文献

[1]严蔚敏,吴伟民.数据结构(C语言版).北京:

清华大学出版社,1997

[2]严蔚敏,吴伟民,米宁.数据结构题集(C语言版).北京:

清华大学出版社,1999

[3]博客园,华山大师兄的博客,最短路径——Dijkstra算法和Floyd算法

 

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的出边邻接点,则权值为∞。

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];

intStation_Num;

}Station_Num;

2.图结点结构:

有邻接点域,存放与改点相邻的顶点的编号,使用整型:

intVER_j_Num;抽象站点的名称,使用字符串:

charStation_Name[20];自引用指针域,指向相邻的下一个节点:

StructTableNode*next;

typedefstruct

{

intVER_j_Num;

charStation_Name[20];

structTableNode*next;

}TableNode;

3.头结点结构:

抽象站点的名称,使用字符串:

charStation_Name[20];抽象站点编号,整型:

intStation_Num;头指针:

StructTableNode*next;

typedefstruct

{

intStation_Num;

charStation_Name[20];

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;

typedefstruct

{

intLine_Num;

intStart_Time_Hour;

intStart_Time_Minute;

intEnd_Time_Hour;

intEnd_Time_Minute;

}Line_Info;

3.2主要算法设计

1.创建图模型:

在建立图模型时,按照线路的结构建立。

每一个起点作为一个头结点,每一条单链表代表一条线路。

故图的头结点数组长度为MAX_LINE_NUM。

此时要使用的辅助存储结构是线路的邻接数组。

遍历邻接数组,根据数组数据判断是否有下一结点并读取结点所代表的站点编号。

流程图如图2:

否是

图2:

建立线路邻图接列表

2.打印线路信息

遍历线路信息数组,依次输出每一条线路的票价、首班时间、末班时间等信息;遍历图,每一条链表是一条线路,依次输出站点名称,名称之间用箭头相连,显示出一天线路的感觉。

流程图如图3:

 

 

 

 

 

图3:

打印新路信息

3.站点定位

有用户输入需要的站点编号,然后程序遍历图模型,当站点编号匹配时,记录下该站点所在的线路编号、线路起点终点、该站点在相应线路上的上一站、下一站。

流程图如下图4:

 

 

 

 

 

 

图4:

站点定位

4.

最优化线路推荐

5.

使用者对照站点名字与编号输入起点编号与终点编号,则通过程序得出两点间的最短距离以及沿途站点,并给出线路推荐。

当两站间有多条线路可以选择时,则给出提示。

该部分使用迪杰特拉斯最短路线算法,使用邻接矩阵的存储结构进行搜索。

Dijkstra算法说明如下:

1)算法思想:

设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合

(用S表示,初始时S中只有一个源点,以后每求得一条最短路径,就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),

第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。

在加入的过程中,

总保持从源点start到S中各顶点的最短路径长度不大于从源点start到U中任何顶点的最短路径长度。

此外,每个顶点对应一个距离,

S中的顶点的距离就是从start到此顶点的最短路径长度,U中的顶点的距离,是从start到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1