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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

图形数据结构实验.docx

1、图形数据结构实验淮海工学院计算机科学系实验报告书课程名: 数据结构 题 目: 图形数据结构实验 班 级: 学 号: 姓 名: 图形数据结构实验报告要求1目的与要求:1)掌握图的邻接矩阵、邻接表、十字链表、邻接多重链表存储结构表示及其创建算法的c语言实现;2)掌握图的深度优先搜索遍历算法和图的广度优先搜索遍历算法及C语言实现;3)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结果);4)认真书写实验报告,并按时提交(第12周周三提交)。2 实验内容或题目题目: 一、图形数据结构实验图的建立与遍历。内容:1) 使用邻接矩阵和邻接表储表示分别实现如下给定的图1和图2所示图的

2、物理存储结构。2) 在1)所建立的图形存储结构上分别实现深度优先搜索遍历和广度优先搜索遍历,并给出遍历结果(序列)。3 实验步骤与源程序 邻接矩阵:#include stdlib.h#include stdio.h#define MAX_VERTEX_NUM 10 /*最多顶点个数*/#define INFINITY 32768 /*表示极大值,即*/#define True 1#define False 0#define Error -1#define Ok 1typedef enumDG, DN, UDG, UDN GraphKind; /*图的种类:DG表示有向图, DN表示有向网, U

3、DG表示无向图, UDN表示无向网*/typedef char VertexData; /*假设顶点数据为字符型*/typedef struct ArcNode int adj; /*对于无权图,用1或0表示是否相邻;对带权图,则为权值类型*/ ArcNode;typedef struct VertexData vexsMAX_VERTEX_NUM; /*顶点向量*/ ArcNode arcsMAX_VERTEX_NUMMAX_VERTEX_NUM; /*邻接矩阵*/ int vexnum,arcnum; /*图的顶点数和弧数*/ GraphKind kind; /*图的种类标志*/AdjMa

4、trix; /*(Adjacency Matrix Graph)*/typedef struct node int data; struct node *next; struct node *first; struct node *last;LinkQueue;int InitQueue(LinkQueue *s) s-first=(LinkQueue*)malloc(sizeof(LinkQueue); s-last=s-first; s-first-next=NULL; return True;int EnterQueue(LinkQueue *s,int x) LinkQueue *te

5、mp; temp=(LinkQueue*)malloc(sizeof(LinkQueue); if(temp!=NULL) temp-data=x; temp-next=NULL; s-last-next=temp; s-last=temp; return True; return False;int IsEmpty(LinkQueue *s) if(s-first=s-last) return True; else return False;int DeleteQueue(LinkQueue *s,int *v) LinkQueue *temp; if(s-last=s-first) ret

6、urn False; temp=(LinkQueue*)malloc(sizeof(LinkQueue); temp-first=s-first-next; s-first-next=temp-first-next; if(s-last=temp-first) s-last=s-first; *v=temp-first-data; free(temp); return True;int LocateVertex(AdjMatrix *G,VertexData v) /*求顶点位置函数*/ int j=Error,k; for(k=0;kvexnum;k+) if(G-vexsk=v) j=k;

7、 break; return(j);int visited50;int CreateDN(AdjMatrix *G) /*创建一个有向网*/ int i,j,k,weight; VertexData v1,v2; printf(输入图的弧数和顶点数n); fflush(stdin); scanf(%d,%d,&G-arcnum,&G-vexnum); /*输入图的顶点数和弧数*/ for(i=0;ivexnum;i+) /*初始化邻接矩阵*/ for(j=0;jvexnum;j+) G-arcsij.adj=INFINITY; for(i=0;ivexnum;i+) /输入顶点字符循环 pri

8、ntf(输入图的顶点n); fflush(stdin); scanf(%c,&G-vexsi); /* 输入图的顶点*/ for(k=0;karcnum;k+) printf(输入一条弧的两个顶点及权值n); fflush(stdin); scanf(%c,%c,%d,&v1,&v2,&weight);/*输入一条弧的两个顶点及权值*/ i=LocateVertex(G,v1); j=LocateVertex(G,v2); G-arcsij.adj=1; /*建立弧*/ return(Ok);int CreateUDN(AdjMatrix *G) /*创建一个有向网*/ int i,j,k,w

9、eight; VertexData v1,v2; printf(输入图的弧数和顶点数n); fflush(stdin); scanf(%d,%d,&G-arcnum,&G-vexnum); /*输入图的顶点数和弧数*/ for(i=0;ivexnum;i+) /*初始化邻接矩阵*/ for(j=0;jvexnum;j+) G-arcsij.adj=INFINITY; for(i=0;ivexnum;i+) /输入顶点字符循环 printf(输入图的顶点n); fflush(stdin); scanf(%c,&G-vexsi); /* 输入图的顶点*/ for(k=0;karcnum;k+) p

10、rintf(输入一条弧的两个顶点及权值n); fflush(stdin); scanf(%c,%c,%d,&v1,&v2,&weight);/*输入一条弧的两个顶点及权值*/ i=LocateVertex(G,v1); j=LocateVertex(G,v2); G-arcsij.adj=1; /*建立弧*/ G-arcsji.adj=G-arcsij.adj; return(Ok);void Depth1(AdjMatrix g1,int vo) int vj; printf(%c,g1.vexsvo); visitedvo=True; for(vj=0;vjg1.vexnum;vj+) i

11、f(!visitedvj)&(g1.arcsvovj.adj=1) Depth1(g1,vj);void Breadth1(AdjMatrix g1,int vo) int vi,vj; LinkQueue Q; InitQueue(&Q); visitedvo=True; EnterQueue(&Q,vo); while(!IsEmpty(&Q) DeleteQueue(&Q,&vi); printf(%c,g1.vexsvi); for(vj=0;vjg1.vexnum;vj+) if(!visitedvj)&(g1.arcsvivj.adj=1) visitedvj=True; Ente

12、rQueue(&Q,vj); void Traverse1(AdjMatrix g1) /邻接矩阵存储结构的深度和广度优先搜索遍历 int vi; for(vi=0;vig1.vexnum;vi+) /深度遍历邻接矩阵 visitedvi=False; printf(n图的深度遍历序列n); for(vi=0;vig1.vexnum;vi+) if(!visitedvi) Depth1(g1,vi); printf(n); for(vi=0;vig1.vexnum;vi+) visitedvi=False; printf(n图的广度遍历序列n); for(vi=0;vig1.vexnum;vi

13、+) if(!visitedvi) Breadth1(g1,vi); printf(n); void main() printf(有向图n); AdjMatrix G; CreateDN(&G); Traverse1(G); printf(无向图n); CreateUDN(&G); Traverse1(G);邻接表:#includestdio.h#includestring.h#includestdlib.h#includemath.h#define MAX_INT 1000#define MAX_VERTEX_NUM 20#define MAX_QUEUE_NUMBER 20#define

14、TRUE 1#define FALSE 0#define QueueElementType inttypedef struct ArcNode int adjvex; double adj; struct ArcNode *nextarc;ArcNode;typedef struct VexNode char szName40; ArcNode *firstarc;VexNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vexs; int vexnum,arcnum;Net;/定义队列typedef struct int *elem; int

15、front, rear;Queue;void InitQueue(Queue &Q) Q.elem = new intMAX_QUEUE_NUMBER; Q.front = Q.rear = 0;int EmptyQueue(Queue Q) if(Q.front=Q.rear) return 0; else return 1;void DestroyQueue(Queue &Q) delete Q.elem; Q.front = Q.rear = 0;void EnterQueue(Queue &Q, int e) if(Q.rear + 1)%MAX_QUEUE_NUMBER != Q.f

16、ront) Q.elemQ.rear = e; else printf(队列满!n); Q.rear = (Q.rear + 1)%MAX_QUEUE_NUMBER;void LeaveQueue(Queue &Q, int &e) if(Q.rear != Q.front) e = Q.elemQ.front; else printf(队列空!n); Q.front = (Q.front+1)%MAX_QUEUE_NUMBER;int LocateVex(Net ga,char *name) int i; for(i=0;iga.vexnum;i+) if(strcmp(name,ga.ve

17、xsi.szName)=0) return i; return -1;void crt_net(Net &ga) ArcNode *p; char name140,name240; int i,j,k; double w; printf(请输入顶点数和弧数:); scanf(%d%d,&ga.vexnum,&ga.arcnum); printf(请依次输入顶点名:n); for(i=0;iga.vexnum;i+) scanf(%s,ga.vexsi.szName); ga.vexsi.firstarc=NULL; for(k=0;kadjvex=j; p-adj=w; p-nextarc=g

18、a.vexsi.firstarc; ga.vexsi.firstarc=p; void DFS(Net ga,char *name,int *visited) int v,w; ArcNode *p; v=LocateVex(ga,name); visitedv=1; printf(%s ,ga.vexsv.szName); p=ga.vexsv.firstarc; while(p!=NULL) w=p-adjvex; if(visitedw=0) DFS(ga,ga.vexsw.szName,visited); p=p-nextarc; void DFSTravel(Net ga,char

19、*name) int v,k=0; int visited20; for(v=0;vga.vexnum;v+) visitedv=0; for(v=LocateVex(ga,name);k!=2;v=(v+1)%(ga.vexnum-1) if(v+1=LocateVex(ga,name) k+; if(visitedv=0) DFS(ga,ga.vexsv.szName,visited); void BFSTravel(Net ga,char *name) ArcNode *p; int v,w,u,k=0; Queue Q; int visited20; for(v=0;vadjvex;

20、if(visitedw=0) printf(%s ,ga.vexsw.szName); visitedw=1; EnterQueue(Q,w); p=p-nextarc; void main() Net ga; crt_net(ga); printf(深度优先遍历:); DFSTravel(ga,ga.vexs1.szName); printf(n); printf(广度优先遍历:); BFSTravel(ga,ga.vexs1.szName); printf(n);4 测试数据与实验结果(可以抓图粘贴) 5 结果分析与实验体会 个人觉得这次的实验很难,很多的地方都不知道要怎么写,比如怎么输出邻接矩阵,邻接表的也不知道要怎么处理,自己改了很久,但是不对,最后是请同学帮忙完成的。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2