数据结构实验图的储存与遍历.docx

上传人:b****5 文档编号:28289546 上传时间:2023-07-10 格式:DOCX 页数:12 大小:194.66KB
下载 相关 举报
数据结构实验图的储存与遍历.docx_第1页
第1页 / 共12页
数据结构实验图的储存与遍历.docx_第2页
第2页 / 共12页
数据结构实验图的储存与遍历.docx_第3页
第3页 / 共12页
数据结构实验图的储存与遍历.docx_第4页
第4页 / 共12页
数据结构实验图的储存与遍历.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数据结构实验图的储存与遍历.docx

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

数据结构实验图的储存与遍历.docx

数据结构实验图的储存与遍历

数据结构 课程实验报告 

学号:

姓名:

实验日期:

实验名称:

图的存贮与遍历

一、实验目的

掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。

二、实验内容与实验步骤

题目1:

对以邻接矩阵为存储结构的图进行DFS和BFS遍历

问题描述:

以邻接矩阵为图的存储结构,实现图的DFS和BFS遍历。

基本要求:

建立一个图的邻接矩阵表示,输出顶点的一种DFS和BFS序列。

测试数据:

如图所示

题目2:

对以邻接表为存储结构的图进行DFS和BFS遍历

问题描述:

以邻接表为图的存储结构,实现图的DFS和BFS遍历。

基本要求:

建立一个图的邻接表存贮,输出顶点的一种DFS和BFS序列。

测试数据:

如图所示

V0

V1

V2

V3

V4

三、附录:

在此贴上调试好的程序。

#include<>

#include<>

#include<>

#defineM100

typedefstructnode

{

charvex[M][2];

intedge[M][M];

intn,e;

}Graph;

intvisited[M];

Graph*Create_Graph()

{Graph*GA;

inti,j,k,w;

GA=(Graph*)malloc(sizeof(Graph));

printf("请输入矩阵的顶点数和边数(用逗号隔开):

\n");

scanf("%d,%d",&GA->n,&GA->e);

printf("请输入矩阵顶点信息:

\n");

for(i=0;in;i++)

scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1]));

for(i=0;in;i++)

for(j=0;jn;j++)

GA->edge[i][j]=0;

for(k=0;ke;k++)

{printf("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):

",k+1);

scanf("%d,%d,%d",&i,&j,&w);

GA->edge[i][j]=w;

}

return(GA);

}

 

voiddfs(Graph*GA,intv)

{inti;

printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]);

visited[v]=1;

for(i=0;in;i++)

if(GA->edge[v][i]==1&&visited[i]==0)dfs(GA,i);

}

voidtraver(Graph*GA)

{inti;

for(i=0;in;i++)

visited[i]=0;

for(i=0;in;i++)

if(visited[i]==0)

dfs(GA,i);

}

 

voidbfs(Graph*GA,intv)

{intj,k,front=-1,rear=-1;

intQ[M];

printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]);

visited[v]=1;

rear=rear+1;

Q[rear]=v;

while(front!

=rear)

{front=front+1;k=Q[front];

for(j=0;jn;j++)

if(GA->edge[k][j]==1&&visited[j]==0)

{printf("%c%c\n",GA->vex[j][0],GA->vex[j][1]);

visited[j]=1;

rear=rear+1;

Q[rear]=j;

}

}

}

voidtraver1(Graph*GA)

{inti;

for(i=0;in;i++)

visited[i]=0;

for(i=0;in;i++)

if(visited[i]==0)

bfs(GA,i);

}

typedefstructNODE

{intadjvex;

structNODE*next;

}ENode;

typedefstructNODE1

{charvex[2];

ENode*first;

}VexNode;

typedefstructFS1

{

VexNodeGL[M];

intbian,top;

}FS;

FS*CreateGL()

{FS*kk=(FS*)malloc(sizeof(FS));

inti,j,k;

ENode*s;

printf("请输入顶点数和边数(用逗号隔开):

\n");

scanf("%d,%d",&kk->top,&kk->bian);

printf("请输入顶点信息:

\n");

for(i=0;itop;i++)

{scanf("%s",kk->GL[i].vex);

kk->GL[i].first=NULL;}

printf("请输入边的信息(i,j):

\n");

for(k=0;kbian;k++)

{scanf("\n%d,%d",&i,&j);

s=(ENode*)malloc(sizeof(ENode));

s->adjvex=j;

s->next=kk->GL[i].first;

kk->GL[i].first=s;

}

returnkk;

}

 

voidDFS(FS*kk,intv)

{ENode*w;inti;

printf("%s\n",kk->GL[v].vex);

visited[v]=1;

w=kk->GL[v].first;

while(w!

=NULL)

{i=w->adjvex;

if(visited[i]==0)

DFS(kk,i);

w=w->next;

}

}

voidTRAVER(FS*kk)

{inti;

for(i=0;itop;i++)

visited[i]=0;

for(i=0;itop;i++)

if(visited[i]==0)

DFS(kk,i);

}

voidBFS(FS*kk,intv)

{intQ[M],front=-1,rear=-1;

ENode*w;

inti,k;

printf("%s\n",kk->GL[v].vex);

visited[v]=1;

rear=rear+1;Q[rear]=v;

while(front!

=rear)

{front=front+1;

k=Q[front];

w=kk->GL[k].first;

while(w!

=NULL)

{i=w->adjvex;

if(visited[i]==0)

{visited[i]=1;printf("%s",kk->GL[i].vex);

rear=rear+1;Q[rear]=i;

}

w=w->next;

}

}

}

voidTRAVER1(FS*kk)

{inti;

for(i=0;itop;i++)visited[i]=0;

for(i=0;itop;i++)

if(visited[i]==0)

BFS(kk,i);

}

intmain()

{

inti=0;

Graph*p;

FS*q;

while(i=1)

{

/*建立菜单*/

charjz[30]={"1.创建邻接矩阵"};

charjd[30]={"2.邻接矩阵DFS遍历"};

charjb[30]={"3.邻接矩阵BFS遍历"};

charbg[30]={"4.创建邻接表"};

charbd[30]={"5.邻接表DFS遍历"};

charbb[30]={"6.邻接表BFS遍历"};

chartc[30]={"7.退出"};

charmn[30]={"菜单"};

intl=strlen(jd);

into=strlen(mn);

intm,n;

printf("\n");

for(m=0;m<=(2*l-o)/2;m++)

printf("");

printf("%s",mn);

for(m=0;m<=(2*l-o)/2;m++)

printf("");

printf("\n");

for(m=0;m<=2*l;m++)

printf("*");

printf("\n");

printf("*%s*\n*%s*\n*%s*\n*%s*\n*%s*\n*%s*\n*%s*\n",jz,jd,jb,bg,bd,bb,tc);

for(m=0;m<=2*l;m++)

printf("*");

printf("\n");

/*选择功能*/

printf("请输入所需功能序号:

");

scanf("%d",&n);

switch(n){

case1:

p=Create_Graph();break;

case2:

traver(p);break;

case3:

traver1(p);break;

case4:

q=CreateGL();break;

case5:

TRAVER(q);break;

case6:

TRAVER1(q);break;

case7:

return0;

default:

printf("输入功能序号有误!

\n");

}

}

return0;

}

 

四、运行结果:

在此把运行结果从屏幕上拷下来贴在此

 

 

五、心得体会:

测试数据要注意现实中矩阵是从1开始,而数组里是从0开始。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 语文

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

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