- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计图的存储与遍历
中南大学
题 目学生姓名
指导教师
学 院
专业班级
完成时间
课程设计目的
1.1掌握图的邻接表存贮结构。
1.2掌握队列的基本运算实现。
1.3掌握图的邻接表的算法实现。
1.4掌握图的广度优先搜索周游算法实现。
1.5掌握图的深度优先搜索周游算法实现
第二章 设计内容和要求
对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)实现图的广度、深度优先搜索周游。
第三章 运行环境
Turber c/c++集成实验与学习环境
第四章 课程设计分析
我的是先通过顶点边构造出图,用邻接表存储,然后用FS或BFS进行遍历
图4.1 设计过程的结构图
通过自己对图的存储与遍历的算法了解和实践,进一步加深了图的邻接表存储,其特点有:
1.存储表示,不惟一,各边表结点的链接次序取决于建立邻接表的算法和边的输入次序;空间复杂度S(n,e)?,S(n,e)=O(n+e)。稀疏图用邻接表表示比用邻接矩阵表示节省存储空间;
2.求顶点的度,无向图:顶点vi的度则是第i个边表中的结点个数;
3.判定?(Vi,Vj)或Vi,Vj是否是图的一条边?;在邻接表表示中,需扫描第i个边表最坏情况下要耗费O(n)时间?;
4.求边的数目,与e的大小无关 只要对每个边表的结点个数计数即可求得e,所耗费的时间,是O(e+n)。当e≤n2时,采用邻接表表示更节省空间。
至于两种遍历,在计算机科学中,经常会遇到图的遍历问题。解决这一问题的经典算法就是所谓深度优先搜索和广度优先搜索,理论证明两套算法的性能是等效的。遍历图的过程实质是通过边或弧找邻接点的过程,因此广度优先搜索遍历图的时间复杂度和深度优先搜索遍历相同,两者不同之处在于对顶点访问的顺序不同而已.
第五章 算法(数据结构)描述
实现图的存储和遍历其思路总体分二个大步骤:
1.1图的存储
采用邻接表对图进行存储,并输出存储结果,为实现邻接表的建立附设连个指向图相关边的指针*p,*q.再用for(k=1;k=e;k++)同时*p,*q移动,给每条边分配内存,再利用函数print(g,n)将建立好的邻接表输出。
1.2图的遍历
图的遍历是指从某个顶点出发,沿着某条搜索路径对图中所有的顶点进行访问且仅访问一次的过程。
1.2.1? 深度优先搜索(DFS)
深度优先搜索类似于树的前序遍历,也是一遇到顶点就进行访问。其特点是尽可能先对纵深方向进行搜索,因此很容易用递归算法实现。如果将遍历过程中走过的边连接起来,即可得到深度优先遍历生成树。
深度优先搜索遍历图的算法:首先访问指定的起始顶点v0,从v0出发,访问v0的一个未被访问过的邻接顶点w1,再从w1出发,访问w1的一个未被访问过的顶点w2,然后从w2出发,访问w2的一个未被访问过的邻接顶点w3。依次类推,直到一个所有邻接顶点都被访问过为止。
1.2.2? 广度优先搜索(BFS)
广度优先搜索类似于树的按层次遍历。首先访问指定的起始点v0,从v0出发,访问v0的所有未被访问过的邻接顶点w1,w2,… wk,然后再依次从w1,w2,… wk出发,访问它们的所有未被访问过的邻接顶点,依次类推,直到图中所有未被访问过的邻接顶点都被访问过为止。
广度优先遍历的特点是尽可能进行横向搜索,即最先访问的顶点其邻接点也被先访问。因此,借助一个队列来保存已被访问过的顶点序列。访问一个顶点vi时(出队),同时将vi相邻的其余结点入队。每个顶点只能入队一次。
图是一种数据结构,加上一组基本操作,就构成了抽象数据类型.图的抽象数据类型定义如下:
ADT Graph {
数据对象 V: V是具有相同特性的数据元素的集合,称为顶点集.
数据关系 R:
R = {VR}
VR = {v,w|v,w属于集合V且P(v,w),v,w表示从v到w的弧,谓词P(v,w)定义了弧v,w的意义或信息 }
基本操作 P:
CreateGraph(G,V,VR);
初始条件:V是图的顶点集,VR是图中弧的集合.
操作结果:按V和VR的定义构造图G.
DFSTraverse(G,Visit());
初始条件:图G存在,Visit是顶点的应用函数.
操作结果:对图进行深度优先遍历.在遍历过程中对每个顶点调用函数Visit一次且仅一次.一旦vis
文档评论(0)