




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机与信息工程系 数据结构课程设计报告学号2014-2015学年 第一学期1308010107数据结构课程设计报告题目:安徽省铁路运输网最佳经由专业:计算机科学与技术班级:13(1)班姓名:丁鑫指导教师:王源成绩:计算机与信息工程系二0一四年十一月二十日1 目录1需求分析.21.1问题描述.21.2设计任务与要求.22概要设计.22.1程序流程图.32.2 数据结构设计.33详细设计.53.1程序设计思想.53.2软件模块结构.64程序调试分析.74.1测试数据.74.2功能测试图.8 4.3时间复杂度分析.10 4.4上机过程中出现的问题及其解决案.115小结.11致谢.12参考文献.12附:核心代码.13161 需求分析1.1问题描述 该题目采用安徽省铁路运输网的数据进行编程和运行验证。详细可在网上搜索安徽省铁路局管辖线路示意图,只要安徽的主干线就可以了。铁路运输网络中由铁路线和火车站的两个主要概念,譬如:1号铁路线表示京广线,2号铁路线表示京沪线等。铁路线对象包括铁路线编号,铁路线名称,起始站编号,终点站编号,该铁路线长度,通行标志(00B客货运禁行,01B货运通行专线,10B客运通行专线,11B客货运通行)。火车站对象包括所属铁路线编号,车站代码,车站名,车站简称,离该铁路线起点站路程及终点站路程。1.2设计任务与要求(1)查询某站所属的铁路线(2)要求具备新增铁路线的管理功能 (3)要求具备新增车站的管理功能 (4)针对客运,货运情况能计算任何一个起始车站到任何一个终点站之间的最短路径。并且要求能够显示出该最短路径的各个火车站的经由顺序2 概要设计2.1程序流程图 在这里简单介绍弗洛伊德算法的核心思想:从图的带权邻接矩阵开始,假设从Vi到Vj有弧,则从Vi到Vj存在一条长度为arcsi j的路径,该路径不一定是最小路径,尚需进行n次试探。首先考虑路径(Vi,V0,Vj)是否存在。如果存在,则比较(Vi,Vj)和(Vi,V0,Vj)的路径长度取长度较短者为从Vi到Vj的中间顶点的序号不大于0的最短路径。假如在路径上再增加一个顶点V1,如果(Vi,.,V1)和(V1,.,Vj)分别是当前找到的中间顶点的序号不大于0的最短路径,那么(Vi,V1,,Vj)就有可能是从Vi到Vj的中间顶点的序号不大于1的最短路径。将它和已经得到的Vi到Vj的中间顶点的序号不大于0的最短路径相比较,从中选出中间顶点的序号不大于1的最短路径之后,再增加一个V2继续试探,以此类推,经过n次比较后,即可求出从Vi到Vj的最短路径。开 始 mainshort_path();floyed(); search();readviews();readways();readlines(); switch(menu)addview();addline();addway();输出谢谢使用.再会.结 束 menu=1 menu=4 menu=2 menu=3 menu=5 图1:程序流程图2.2数据结构设计存储结构:本程序部分函数采用的是文件进行数据的存储,所以采用的是顺序存储结构,如要添加数据,直接在文件里面进行操作就行了。弗洛伊德算法中采用的存储结构是图的邻接矩阵。A.如下为抽象数据类型定义的模板以及抽象数据类型线性表的定义: ADT List数据对象:D=ai| ai ElemSet,i=1,2,3,n,n0数据关系:R1=| ai-1,ai D,i=1,2,3,n基本操作:void readviews()初始条件:views.txt已经存在。操作结果:将 views.txt里面的数据一次存入数组viewsSIZE_view里,并将数组里面的存储数据的个数赋值给全局变量view_count;void readways()初始条件:ways.txt已经存在。操作结果:将 ways.txt里面的数据一次存入数组waysSIZE_way里,并将数组里面的存储数据的个数赋值给全局变量way_count;void readlines()初始条件:lines.txt已经存在。操作结果:将 lines.txt里面的数据一次存入数组linesSIZE_line里,并将数组里面的存储数据的个数赋值给全局变量line_count;void search();初始条件:viewsSIZE_view存在,且里面放有相关信息。操作结果:根据用户输入的车站名查找该车站的相关信息并输出;void addview()初始条件:views.txt已经存在。操作结果:将 views.txt里面的数据一次存入数组viewsSIZE_view里,并将数组里面的存储数据的个数赋值给全局变量view_count;void addway()初始条件:ways.txt已经存在。操作结果:将 ways.txt里面的数据一次存入数组waysSIZE_way里,并将数组里面的存储数据的个数赋值给全局变量way_count;void addline()初始条件:lines.txt已经存在。操作结果:将 lines.txt里面的数据一次存入数组linesSIZE_line里,并将数组里面的存储数据的个数赋值给全局变量line_count;void floyed()初始条件: viewsSIZE_view、waysSIZE_way、linesSIZE_line已经存在并且存有相关信息。操作结果:把每个车站到各个车站的最短经由路径及此路径的距离存储在path_info、path_listSIZE_viewSIZE_view数组里;void shortest_path()初始条件:path_info、path_listSIZE_viewSIZE_view存储相关的数据; 操作结果:输出输入的两个站的最短距离及经过的所有站;void addadta(int menu)初始条件:views.txt、ways.txt、lines.txt已经存在。操作结果:如果menu=1,则添加车站数据,如果menu=2,则添加路线数据;B.弗洛伊德算法中,数据结构所用到的思想为图的思想,所以数据结构的设计主要的目的为便于图的操作的设计。因此我们用了下面这些数据定义。 struct view_info /*城市信息结构*/int id; char name20; int code; char shortname20; char LName100;/经过此站的铁路线名称viewsSIZE_view;struct line_info/铁路线信息结构int Lid; char LName20; int start_id; /始发站 int end_id; /终点站 int dist; /铁路线长 char sign5; /通行标志linesSIZE_line;struct way_info /铁路度的信息结构int station1; int station2; int dist;waysSIZE_way;struct path_info /用于最短路径的查询;3详细设计3.1程序设计思想 设计思路:核心问题:求最短路径(弗洛伊德算法)数据模型(逻辑结构):带权有向图输入输出:初始数据是从views.txt、lines.txt、way.txt三个文件中读入,在读入数据后,用户可以根据选项选择相应的功能,不同的功能有不同的数据输入/输出,比如:查询的功能是要求输入要查询的站的名称,然后输出是该站的相关信息;查询最int count; int pathSIZE_view;短路径的功能则是输入起点站、终点站的名称,输出则是该段路线距离和经由站等。程序的输入:(1)铁路线信息的输入:依次输入“铁路线代码,铁路线名称,起始站代码, 终点站代码,该铁路线长度、通行标志” ,并且中间以空格隔开。(2)火车站信息的输入:依次输入“车站代码,车站名,车站编号、车站简称,所属铁路线编号” ,并且中间以空格隔开。程序的输出格式;(1)当显示铁路线或者火车站的信息时,与输入时的格式完全一致 ;(2)输出最短路径的长度,以及最短路径的经由顺序;按照程序功能要求,设计了一下各个功能模块:(1)文件读取模块文件读取模块包括读取车站信息模块readviews、路段权值信息读取模块readlines、铁路线信息读取模块readlines。这些模块的主要功能为从文件中读取所需的信息。(2)添加信息模块adddata添加信息模块又包括以下子功能模块:A、添加站点信息模块addview。B、添加路段权值模块addway。C、添加铁路线信息模块addline。(3)查询模块根据用户需求,查询站点信息(4)最短路径查询模块 该模块为本软件设计的核心部分。根据该模块可以很方便的找出两个城市的最短路径。该最短路径的算法为常用的弗洛伊德算法。(5)操作菜单模块该模块主要用于与用户的交互,一个界面友好的菜单可以提高软件的人机交互体验。3.2 软件模块结构(1) 主程序模块,其中主函数为: oid main() 新增火车站;新增铁路线;查询火车站的信息; 针对客运、货运情况,求两站之间的最短路径及其经由顺寻;退出界面 (2) 文件模块为:void readways(); void readviews(); void readlines() (3) 图模块为:void short_path();void floyed() (4) 查询函数和添加函数void search();void adddata(in menu); void addway(); void addline();void addview() 函数的调用:进入主函数,调用文件模块各函数以读取数据; 选择1或2,则调用void adddata(in menu),其中若选择1,则调用void addview()函数; 若选择2,则调用void addline()和void addway()函数; 选择3,调用void search()函数进行查询; 选择4,调用void short_path()和void floyed()函数以得到最短路径。4程序调试分析4.1测试数据数据读取如下:图2:数据读取显示图3:操作界面显示4.2功能测试截图:输入1,增加车站信息如下:图4:增加车站信息输入2,增加铁路线信息如下:图5:增加铁路线信息输入3,查询车站信息如下:图6:查询车站信息输入4,查询最短路径如下:图7:查询最短路径输入5,退出界面如下:图8:退出界面显示4.3时间复杂度分析 程序中图的存储结构为带权邻接矩阵, 其中对邻接矩阵的初始化的时间复杂度为O(n*n); 在求最短路径的时候,用的是弗洛伊德算法,时间复杂度主要在于求每一站到任意站的最短路径由是的for循环,那有三个for循环,所以时间复杂度为O(n3)。 4.4上机过程中出现的问题及其解决方案(1)刚刚看到题目要求的时候就想到了弗洛伊德算法,但是不知道如何去做,在网站搜索到类似代码,经过修改后,最终得出了源程序。(2)源程序可以运行的时候,忘记添加相关文本文件,所以运行文件的时候会提示文件打开失败,无法进行接下来的功能使用,这时候才想起来要自行添加相关的文本文档,接着问题就解决了。(3)在way.text文本文档中添加各站权值的时候,一开始不知道如何添加,经过思考和查询课本后,明白了添加权值时是以各站编码代表各站,由于是有向图,所以需要添加两站往返权值。(4)在输入信息时,由于是输入汉字,系统不稳定,容易出现刷屏,这个问题,我是向学长寻求帮助并得以解决的。5 小 结本次课程设计我做的是安徽省铁路网最经经由问题,功能都实现了,运行顺畅。对于这次的数据结构设计我觉得我们还是挺成功的。以下是我在这次数据结构中的体会。我觉得相比大一做的C语言程序设计而言,这次的程序难了很多,但同时教会了我更多的知识,最重要的就是让我明白了数据结构这门课程的使用价值。以前,在课堂上老师一遍遍的讲到数据结构和编程语言的关系,自从完成了课程设计以后我突然恍然大悟,明白了数据结构和C语言等编程语言的关系。简单的说,它就是一个程序所采用的逻辑结构(有集合,线性表,树和图等)和存储结构(顺序和链表)。只有确定了这些,再加上算法才能写出一个程序。在写本次程序时,遇到了不少的问题。主要还是对编程语言的不熟悉,虽然总体思路可以明确,但是真的写起来却漏洞百出。因此,我们上网搜索相关资料,找到了类似的源程序,参考源程序之后,我们进行了一系列的改错和完善。遇到不明白的部分,马上询问学长或者优秀的同学,让他们为我们指点迷津。最终把他们都解决了。虽然这次花的时间比较多,但是收获也是很大啊。 通过本次课程设计,增强了我的调试程序的能力,以及分析程序,分析算法的能力。巩固了我数据结构的知识,对与去年学习的一门学科的温习,让我更了解了弗洛伊德算法,熟练掌握了函数的定义,函数的调用等编程能力。我相信只有自己的能力不断地提高,才能编写出高质量的程序来。最后我想说,数据结构是一门很复杂的学科,难懂。但是只要你利用学习到的理论知识去实践,结合实践去分析和理解它,最终你会发现它也不过如此。 在实践的过程中互相帮助很重要,它能让你在困境中体会到快乐,在苦涩的学习中体会友情带来的快乐!致谢 在这次数据结构课程设计中,我的老师和同学给了我及大的帮助。特别是我的指导老师王源老师,在此,我对他们表示感谢!感谢他们在我面对困难时给了我帮助和支持。也感谢那些给我帮助的所有同学!参考文献1谭浩强著.C程序设计(第二版).北京:清华大学出版社,19992谭浩强,张基温,唐永炎编著.C语言程序设计.北京:高等教育出版社,19923谭浩强编著.QBASIC语言教程.北京:电子工业出版社,19974谭浩强.C程序设计M.3版.北京:清华大学出版社,2005源程序struct view_info /*城市信息结构*/ int id;char name20; int code; char shortname20;char LName100;/经过此站的铁路线名称viewsSIZE_view;struct line_info/铁路线信息结构int Lid;char LName20;int start_id; /始发站int end_id; /终点站int dist; /铁路线长char sign5; /通行标志linesSIZE_line;while(1)int menu;coutendlendl;cout 安徽铁路运输网经由系统endl;cout*endl; cout 1、增加车站信息endl;cout 2、增加铁路线信息endl;cout 3、查询车站信息endl;cout 4、查询最短路径endl;cout 5、退出界面endl;cout*endl;cout请选择你要的操作代码.1-5):menu;while(menu5)/couterror!please enter again:; coutmenu;void floyed() /弗洛伊德算法int i,j,k,m;/包含着count 和path用来存储经过的路径/ for(i=0;i=view_count;i+)/ for(j=0;j=view_count;j+)/ dist_listij=MAXCOST;/先对任意两点的距离初始值为无穷for(int t=0;t=way_count;t+)i=wayst.station1;j=wayst.station2;dist_listij=wayst.dist;/把文件中的数据付给dist_listij=wayst.dist;形式for(i=0;i=view_count;i+) for(j=0;j=view_count;j+) if(i=j) /车站到本车站的距离赋值为零 dist_listij=0; continue;dist_listij=-1; /先设置任意两点之间的距离为-1.表示这两点不通 path_listij.count=0; /先设置任意两点之间的的路径的车站数为零 for(k=0;kway_count;k+) /ways 文件的数据赋给dist_list 数组、并记下其中任两站的路径if(waysk.station1=i&waysk.station2=j)dist_listij=waysk.dist;path_listij.count=2;path_listij.path0=i;path_listij.path1=j;break;/下面是计算最短路径的代码for(k=0;k=view_count;k+)for(i=0;i=view_count;i+)for(j=0;j=view_count;j+)if(i=k|j=k|i=j) /三个站中至两个站是相同的的话就是继续循环 continue;if(dist_listik=-1|dist_listkj=-1) /i、k 不通或者k、j 不通继续循环continue;if(dist_listij=-1)|(dist_listij != -1)&(dist_listik+dist_listkjdist_listij) /i、j 不通.或者是i、j 通但是不是最短路径.执行下面语句dist_listij=dist_listik+dist_listkj; /求出i、j 的最短距离/shortestij=shortestik+shortestkj;path_listij.count=path_listik.count+path_listkj.count-1; /求出i、j 路径的站的个数/path_listij=k;for(m=0;mpath_listik.count;m+) /下面两个for 语句标出i、j路径的每个站的id 号.以便后面的输出最短经由路径用path_listij.pathm=path_listik.pathm; for(m=0;mpath_listkj.count;m+)path_listij.pathm+path_listik.count=path_listkj.pathm+1; void shortest_path()floyed();int i,k,m;int s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务岗位面试实战模拟题库:数据分析与应用
- 学前班比较物体大小课件
- 2025年化工新材料在3D打印领域的应用创新与市场分析报告
- 孩子科学素养提升路径
- 2025疼痛医疗服务行业竞争格局报告:现状与痛点解析001
- 2025年海洋生态保护政策与海洋生态系统服务功能保护与提升报告
- 2025年新型农机行业研究报告及未来发展趋势预测
- 2025年电站锅炉行业当前发展趋势与投资机遇洞察报告
- 个人养老金制度实施对绿色金融投资领域的影响与机遇分析报告
- 2025年预拌商品混凝土行业当前竞争格局与未来发展趋势分析报告
- 2025年游泳池设施设备器材安全检查制度(二篇)
- 2025考研408计算机基础综合真题及答案
- 职业病危害因素检测与评价-工作场所空气中粉尘浓度的测定
- 四川省广安市2024-2025学年高一下学期期末考试数学试题(含答案)
- 展台搭建施工管理办法
- 个人养老金课件
- 儿科穴位贴敷治疗讲课件
- 2025年湖北省中考英语试题(附答案)
- 三一研发项目管理制度
- 轮胎公司中长期发展战略规划纲要(2025-2030年)
- 浙江省衢州市2023-2024学年高二下学期6月教学质量检测数学试题(含答案)
评论
0/150
提交评论