实验分析报告图的存储结构和遍历.docx

上传人:b****4 文档编号:27050733 上传时间:2023-06-26 格式:DOCX 页数:8 大小:61.42KB
下载 相关 举报
实验分析报告图的存储结构和遍历.docx_第1页
第1页 / 共8页
实验分析报告图的存储结构和遍历.docx_第2页
第2页 / 共8页
实验分析报告图的存储结构和遍历.docx_第3页
第3页 / 共8页
实验分析报告图的存储结构和遍历.docx_第4页
第4页 / 共8页
实验分析报告图的存储结构和遍历.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

实验分析报告图的存储结构和遍历.docx

《实验分析报告图的存储结构和遍历.docx》由会员分享,可在线阅读,更多相关《实验分析报告图的存储结构和遍历.docx(8页珍藏版)》请在冰豆网上搜索。

实验分析报告图的存储结构和遍历.docx

实验分析报告图的存储结构和遍历

实验报告:

图的存储结构和遍历

作者:

日期:

武汉东湖学院

实验报告

姓名

付磊

学号

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;in;i++){p=G->adjlist[i].firstarc;

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;in;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模板 > 其它模板

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

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