ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:175.58KB ,
资源ID:24379159      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24379159.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图的遍历数据结构实验报告.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

图的遍历数据结构实验报告.docx

1、图的遍历数据结构实验报告山西大学计算机与信息技术学院实验报告姓 名学 号专业班级课程名称 数据结构实验日期2015/5/20成 绩指导教师批改日期实验名称 图遍历的演示一、实验目的: 1、问题描述:很多涉及图上操作的算法都是以图的遍历操作为基础的。本次实验要求写一个程序,演示在连通的无向图上访问全部结点的操作; 2、基本要求:以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集; 3、测试数据:教科书图7.33(一个表示交通网的例图)。暂时忽略里程,起点为北京。 4、实现提示:设图的结点不超过30个,每个结点

2、用一个编号表示(如果一个图有n个结点,则它们的编号分别为1,2,n)。通过输入图的全部边输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制。注意,生成树的边是有向边,端点顺序不能颠倒。二、实验内容:1、概要设计(1)抽象数据类型图的定义如下:ADT Stack 数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。数据关系R: R=VRVR=(v,w)|v,wV,(v,w)表示v和w之间存在的路径基本操作P: CreateGraph(&G,V,VR) 初始条件:V是图的顶点集,VR是图中边的集合。 操作结果:按V和VR的定义构造图G。DestroyGraph(&G)初始条件:图G

3、已存在。操作结果:图G被销毁。 LocateVex(G,u)初始条件:图G存在,u和G中顶点有相同特征。操作结果:若G中存在顶点u,则返回该顶点在图中的位置;否则返回其他信息。 GetVex(G,v)初始条件:图G存在,v是G中某个顶点。操作结果:返回v的信息。 FirsrEdge(G,v)初始条件:图G存在,v是G中某个顶点。操作结果:返回依附于v的第一条边。若该顶点在G中没有邻接点,则返回“空”。 NextEdge(G,v,w)初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。操作结果:返回依附于v的(相对于w的)下一条边。若不存在,则返回“空”。 InsertVex(&G,v)初始

4、条件:图G存在,v和图中顶点有相同特征。操作结果:在图G中增添新顶点v。DeleteVex(&G,v)初始条件:图G存在,v是G中某个顶点。操作结果:删除G中顶点v及其相关的边。 InsertEdge(&G,v,w)初始条件:图G存在,v和w是G中两个顶点。操作结果:在G中增添边(v,w)。DeleteEdge(&G,v,w)初始条件:图G存在,v和w是G中两个顶点。操作结果:在G中删除边(v,w)。GetShortestPath(G,st,nd,&Path)初始条件:图G存在,st和nd是G中两个顶点。操作结果:若st和nd之间存在路径,则以Path返回两点之间一条最短路径,否则返回其他信息

5、。ADT Graph (2)本程序包含三个模块: 1)主程序模块 void main() 初始化; do 接受命令; 处理命令;while(“命令”!=“退出”); 2)深度优先遍历void DFS(Graph *graph,int v) 3)广度优先遍历void BFS(Graph *graph,int u) 2、详细设计#include stdafx.h#include#include#include#define MAX 30typedef struct QNode int data; struct QNode *next;QNode;typedef struct QNode *rear

6、; QNode *front;LinkQueue;void InitQueue(LinkQueue *Q) Q-front =Q-rear =(QNode *)malloc(sizeof(QNode); Q-front -next =NULL;void EnQueue(LinkQueue *Q,int v) QNode *p; p=(QNode *)malloc(sizeof(QNode); p-data =v; p-next =NULL; Q-rear -next =p; Q-rear =p;void DeQueue(LinkQueue *Q,int *v) QNode *p; if(Q-f

7、ront =Q-rear ) return; p=Q-front -next ; *v=p-data ; Q-front -next =p-next ; if(Q-rear =p) Q-rear =Q-front ; free(p);typedef struct EdgeNode int ivex,jvex; struct EdgeNode *ilink,*jlink;EdgeNode;typedef struct VexNode int markV; char info; int num; EdgeNode *firstedge;VexNode;typedef struct VexNode

8、adjlistMAX; int vexnum,edgenum;Graph;void Initilized(Graph *graph) graph=(Graph *)malloc (sizeof(Graph); graph-vexnum =0; graph-edgenum =0;void CreateGraph(Graph *graph) EdgeNode *p,*q,*e; int i; printf(请输入连通无向图的顶点个数和边的条数:n); scanf(%d %d,&graph-vexnum,&graph-edgenum); while(graph-vexnumMAX|graph-edg

9、enum (graph-vexnum *(graph-vexnum -1)/2) printf(输入有误,请重新输入顶点数与边的条数!n); scanf(%d%d,&graph-vexnum ,&graph-edgenum ); for(i=1;ivexnum;i+) printf(请输入第%d个顶点的信息:n,i); scanf(%s,&graph-adjlist i.info ); graph-adjlist i.num =i; graph-adjlisti.firstedge=NULL; graph-adjlist i.markV =0; for(i=1;iedgenum;i+) p=(

10、EdgeNode *)malloc(sizeof(EdgeNode); printf(请输入每条边依附的两个顶点(用顶点的编号表示)n); scanf(%d %d,&p-ivex,&p-jvex); while(p-ivex =p-jvex|p-ivexivex graph-vexnum |p-jvex jvex graph-vexnum ) printf(输入的顶点有误,请重新输入!n); scanf(%d%d,&p-ivex,&p-jvex); p-ilink =p-jlink =NULL; if(graph-adjlist p-ivex .firstedge=NULL ) graph-a

11、djlist p-ivex .firstedge =p; else q=graph-adjlist p-ivex .firstedge ; while(q!=NULL) e=q; if(q-ivex =p-ivex ) q=q-ilink ; else q=q-jlink ; if(e-ivex =p-ivex ) e-ilink =p; else e-jlink =p; if(graph-adjlist p-jvex .firstedge=NULL ) graph-adjlist p-jvex .firstedge =p; else q=graph-adjlist p-jvex .first

12、edge ; while(q!=NULL) e=q; if(q-ivex =p-ivex ) q=q-ilink ; else q=q-jlink ; if(e-ivex =p-ivex ) e-ilink =p; else e-jlink =p; void SetMark(Graph *graph) int i; for(i=1;ivexnum ;i+) graph-adjlist i.markV =0;void DFS(Graph *graph,int v) EdgeNode *p; printf(%d ,v); graph-adjlist v.markV =1; p=graph-adjl

13、ist v.firstedge ; while(p!=NULL) if(p-ivex =v) if(graph-adjlist p-jvex .markV =0) printf(n,p-ivex ,p-jvex ); DFS(graph,p-jvex ); p=p-ilink ; else if(graph-adjlist p-ivex.markV =0) printf(n,p-jvex ,p-ivex ); DFS(graph,p-ivex ); p=p-jlink ; void BFS(Graph *graph,int u) LinkQueue Q; EdgeNode *p; InitQu

14、eue(&Q); printf(%d ,u); graph-adjlist u.markV =1; EnQueue(&Q,u); while(Q.front !=Q.rear ) DeQueue(&Q,&u); p=graph-adjlist u.firstedge ; while( p!=NULL) if(p-ivex =u) if(graph-adjlist p-jvex .markV =0) EnQueue(&Q,p-jvex ); graph-adjlist p-jvex .markV =1; printf(n,p-ivex ,p-jvex ); printf(%d ,p-jvex )

15、; p=p-ilink ; else if(graph-adjlist p-ivex .markV =0) EnQueue(&Q,p-ivex ); graph-adjlist p-ivex .markV =1; printf(n,p-jvex ,p-ivex ); printf(%d ,p-ivex ); p=p-jlink ; void main() int u,v; Graph graph; char order; Initilized(&graph); CreateGraph(&graph); printf(输入命令(C/c:重新创建连通无向图T/t深度遍历广度遍历E/e:结束):n)

16、; scanf(%s,&order); while(order!=E&order!=e) switch(order) case C: case c: Initilized(&graph); CreateGraph(&graph); break; case T: case t: printf(n输入深度广度遍历的起始点:n); scanf(%d,&v); u=v; while(vgraph.vexnum ) printf(n输入顶点编号错误,请重新输入!); scanf(%d,&v); u=v; printf(n深度遍历序列及相应的生成树:n顶点序列:生成树边集:n); SetMark(&graph); DFS(&graph,v); printf(n广度遍历序列及相应生成树:n顶点序列:生成树边集:n); SetMark(&graph); BFS(&graph,u); break; printf(n输入命令(C:创建连通无向图T/t:深度广度遍历E:结束):n); scanf(%s,&order); 三、实验结果:四、结果分析:实验结果正确。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1