实验分析报告图的存储结构和遍历.docx
- 文档编号:27050733
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:8
- 大小:61.42KB
实验分析报告图的存储结构和遍历.docx
《实验分析报告图的存储结构和遍历.docx》由会员分享,可在线阅读,更多相关《实验分析报告图的存储结构和遍历.docx(8页珍藏版)》请在冰豆网上搜索。
实验分析报告图的存储结构和遍历
实验报告:
图的存储结构和遍历
作者:
日期:
武汉东湖学院
实验报告
姓名
付磊
学号
2015040131042
班级
计科一班
指导老师
吴佳芬
课程名称
数据结构
成
实验名称
图的存储结构和遍历
绩
学院:
计算机科学学院专业计算机科学与技术
2016年11月18日
1.实验目的
(1)了解邻接矩阵存储法和邻接表存储法的实现过程。
(2)了解图的深度优先遍历和广度优先遍历的实现过程。
2.实验内容
1.采用图的邻接矩阵存储方法,实现下图的邻接矩阵存储,并输出该矩阵
2.设计一个将第1小题中的邻接矩阵转换为邻接表的算法,并设计一个在屏幕上显示邻接表的算法
3.实现基于第2小题中邻接表的深度优先遍历算法,并输出遍历序列
4.实现基于第2小题中邻接表的广度优先遍历算法,并输出遍历序列
3.实验环境
VisualC++6.0
4.实验方法和步骤(含设计)
我们通过二维数组中的值来表示图中节点与节点的关系。
通过上图可知,其邻接矩阵示意图为如下:
V0
v1
v2
v3v4v5
V00
1
0
101
V11
01
1
1
0
V20
10
0
1
0
V31
10
0
1
1
V40
11
1
0
0
V51
00
1
0
0
此时的
a
1”
表示这两个节点有关系,
“0”表示这两个节点无关系
我们通过邻接表来在计算机中存储图时,其邻接表存储图如下:
0
4卜
申|1”5
3
A
WI
9
却-
3
T呂|A
1
1卜
5
TslAl
丄11号
5.程序及测试结果X
#include
#include
intvisited[6];
typedefstruct
{inta[6][6];
intn;
}mgraph;
typedefstructANode
{
intadjvex;
structANode*nextarc;
}ArcNode;
typedefstructVnode
{
ArcNode*firstarc;
}VNode;
typedefVNodeAdjList[6];
typedefstruct
{AdjListadjlist;
intn;
}ALGraph;
voidmattolist(mgraphg,ALGraph*&G)
{inti,j;
ArcNode*p;G=(ALGraph*)malloc(sizeof(ALGraph));
for(i=0;i G->adjlist[i].firstarc=NULL; for(i=0;i for(j=g.n-1;j>=0;j--) if(g.a[i][j]! =0) {p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j; p->nextarc=G->adjlist[i].firstarc; G->adjlist[i].firstarc=p; } G->n=g.n; } voiddispadj(ALGraph*G) {inti; ArcNode*p;for(i=0;i printf("%d: ",i); while(p! =NULL) {printf("%d",p->adjvex);p=p_>nextarc; }printf("\n"); } } voiddfs(ALGraph*G,intv) { ArcNode*p; visited[v]=1;printf("%d",v);p=G->adjlist[v].firstarc;while(p! =NULL) {if(visited[p->adjvex]==0)dfs(G,p->adjvex);p=p->nextarc; } } voidbfs(ALGraph*G,intv) {ArcNode*p; intqueue[6],front=0,rear=0; intvisited[6]; intw,i; for(i=0;i visited[i]=0; printf("%d",v); visited[v]=1;rear=(rea叶1)%6;queue[rear]=v;while(front! =rear){front=(front+1)%6;w=queue[front];p=G->adjlist[w].firstarc;while(p! =NULL){ if(visited[p->adjvex]==0) { printf("%d",p->adjvex);visited[p->adjvex]=1; rear=(rea叶1)%6; queue[rear]=p->adjvex; }p=p_>nextarc; } } printf("\n"); } intmain() { mgraphg; ALGraph*G; inta[6][6]={{0,1,0,1,0,1},{1,0,1,1,1,0},{0,1,0,0,1,0}, {1,1,0,0,1,1},{0,1,1,1,0,0},{1,0,0,1,0,0}}; inti,j; g.n=6; for(i=0;i for(j=0;jvg.n;j++) g.a[i][j]=a[i][j]; for(i=0;i {for(j=0;j printf("%d",g.a[i][j]); printf("\n"); } printf("邻接矩阵\n"); G=(ALGraph*)malloc(sizeof(ALGraph));mattolist(g,G); dispadj(G); printf("令B接表\n"); dfs(G,0); printf("\n"); printf("从0开始的深度优先遍历\n"); bfs(G,0); printf("\n"); printf("从0开始的广度优先遍历\n"); return0; } 6.实验分析与体会 通过此次实验,使我更加深刻的明白了图在计算机中是如何存储的,图在计算机中的存储有两种,一种是邻接矩阵存储方式,这种方式我们主要是运用到了二维数组的特性,通过二维数组来明确表现出节点与节点的位置关系,第二种就是我们说的邻接表存储结构,这种结构主要是运用到了指针来实现。 而当我们在进行图的遍历时,首先要选择一个起始点,上面我们选择的是0为起始点,当我们在进行深度优 先遍历时,可以用递归的思想,而在广度优先遍历时,不能用递归,这个要注意。 在这次的实验中,通过对图的操作,使我对数组和指针都有了更加深刻地认识,我认为我们要多打代码,因为这样我们才能够更全面的理解每一个指令的意思,同时我们也应该要将代码分成一个更小的指令的看,这样我们对程序将有更好地提高,更大的认识。 实验日期: 2016_年11一月17_日 教师评语 签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 分析 报告 存储 结构 遍历