数据结构课程实验(图的存储与遍历)

数据结构课程实验(图的存储与遍历)

ID:12125710

大小:61.00 KB

页数:10页

时间:2018-07-15

数据结构课程实验(图的存储与遍历)_第1页
数据结构课程实验(图的存储与遍历)_第2页
数据结构课程实验(图的存储与遍历)_第3页
数据结构课程实验(图的存储与遍历)_第4页
数据结构课程实验(图的存储与遍历)_第5页
资源描述:

《数据结构课程实验(图的存储与遍历)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验五图的存储与遍历1、实验目的掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(dfs)和广度优先遍历(BFS)操作的实现。2、实验预备知识(1)图的存储结构:邻接矩阵表示法和邻接表表示法。邻接矩阵表示法除了要用一个二维数组存储用于表示顶点间相邻关系的邻接矩阵外,还需用一个一维数组来存储顶点信息,另外还有图的顶点数和边数。邻接表表示法类似于树的孩子链表表示法。(2)图的遍历方法有深度优先遍历(Depth-FirstTraersal)和广度优先遍历(Bre

2、adth-FirstTraversal),简称DFS和BFS。DFS对图遍历时尽可能先对纵深方向进行搜索;BFS是类似于树的按层次遍历。 3、实验内容题目1对以邻接矩阵为存储结构的图进行DFS和BFS遍历(1)问题描述:以邻接矩阵为图的存储结构,实现图的DFS和BFS遍历。(2)基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS和BFS序列。(3)测试数据:如图4.18所示。(4)实现提示:图的DFS遍历可通过递归调用或用栈来实现。其思想是:只要当前结点未访问过,就访问该结点,沿着其一条分支深入

3、下去,每深入一个未访问过的结点,就访问这个结点,然后从这个结点继续进行DFS遍历。在这一过程中,若深入时遇到一个已访问过的结点,则查找是否有与这个结点相邻的下一个未访问过的结点。若有则继续深人,否则将退回到这个结点的前一个结点,再找下一个相邻的本访问过的结点,……如此进行下去,直到所有的结点都被访问过。BFS遍历可利用队列来帮助实现,也可以用栈。实现方法与二叉树的层次遍历类似。题目2对以邻接表为存储结构的图进行DFS和BFS遍历(1)问题描述:以邻接表为存储结构,实现图的DFS和BFS遍历。(2)基本

4、要求:建立一个图的邻接表存储,输出顶点的一种DFS和BFS序列。(3)测试数据:如图4.19所示:(4)实现提示:以邻接表为存储结构的图的DFS和BFS算法的实现思想与以邻接矩阵为存储结构的实现是一样的。只是由于图的存储形式不同。而具体到取第一个邻接点和下一个邻接点的语句表示上有所差别而已。4、实验步骤(1)仔细分析实验内容,给出其算法和流程图;(2)用C语言实现该算法;(3)给出测试数据,并分析其结果;(4)在实验报告册上写出实验过程。5、实验报告要求实验报告要求书写整齐,步骤完整,实验报告格式如下

5、:1、[实验目的]2、[实验设备]3、[实验步骤]4、[实验内容]5、[实验结果(结论)]程序如下:/*sy41.c*/#defineMaxVertexNum10//设最大顶点数为10#include#includetypedefcharVertexType;typedefintEdgeType;typedefstruct{charvexs[10];intedges[10][10];intn,e;}MGraph;#defineFALSE0#defineTRUE1#

6、defineErrorprintfintvisited[10];voidCreateMGraph(MGraph*G);voidDFSTraverseM(MGraph*G);voidBFSTraverseM(MGraph*G);voidDFSM(MGraph*G,inti);voidBFSM(MGraph*G,inti);#defineQueueSize30/*假定预分配的队列空间最多为30*/typedefintDataType;/*队列中的元素类型为字符型*/typedefstruct{intfro

7、nt;/*队头指针,队非空时指向队头元素*/intrear;/*队尾指针,队非空时指向队尾元素的下一位置*/intcount;/*计数器,记录队中元素总数*/DataTypedata[QueueSize];}CirQueue;voidInitQueue(CirQueue*Q)/*初始队列*/{Q->front=Q->rear=0;Q->count=0;}intQueueEmpty(CirQueue*Q)/*判队空*/{returnQ->count==0;}intQueueFull(CirQueue*Q

8、)/*判队满*/{returnQ->count==QueueSize;}voidEnQueue(CirQueue*Q,DataTypex)/*入队*/{if(QueueFull(Q))Error("Queueoverflow");/*队满上溢*/else{Q->count++;/*队列元素个数加1*/Q->data[Q->rear]=x;/*新元素插入队列*/Q->rear=(Q->rear+1)%QueueSize;/*循环队列的尾指针加1*/}}Da

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。