数据结构课程设计图的存储与遍历
中南大学
题 目学生姓名
指导教师
学 院
专业班级
完成时间
课程设计目的
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)或是否是图的一条边?;在邻接表表示中,需扫描第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且P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息 }
基本操作 P:
CreateGraph(&G,V,VR);
初始条件:V是图的顶点集,VR是图中弧的集合.
操作结果:按V和VR的定义构造图G.
DFSTraverse(G,Visit());
初始条件:图G存在,Visit是顶点的应用函数.
操作结果:对图进行深度优先遍历.在遍历过程中对每个顶点调用函数Visit一