c语言队头元素出队并置为u,数据结构课程设计图的存储与遍历.doc

数据结构课程设计图的存储与遍历

中南大学

题 目学生姓名

指导教师

学 院

专业班级

完成时间

课程设计目的

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一

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值