数据结构实验报告6.docx
- 文档编号:1129794
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:12
- 大小:70.29KB
数据结构实验报告6.docx
《数据结构实验报告6.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告6.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构实验报告6
实验报告(6)
实验名称
图及其应用实验
同组人姓名
实验性质
□基本操作●验证性
□综合性□设计性
实验日期
实验成绩
教师评价:
实验预习□实验操作□实验结果□实验报告□其它□
教师签名:
一、实验目的及要求
1)图是一种重要的非线性数据结构,要求掌握图的两种基本的存储结构(邻接矩阵、邻接表),以及图的基本算法实现(建立、深度优先遍历、广度优先遍历),并能运用图结构分析解决一些实际问题。
2)本实验训练的要点是:
图的两种基本存储结构,及各种操作的算法实现(建立、遍历、图的典型应用)
二、实验内容
图的两种基本存储结构,及各种操作的算法实现(建立、遍历、图的典型应用):
1)建立无向图和有向图的邻接矩阵存储,计算顶点的度,并按要求输出图的基本信息。
2)建立有向图的邻接表存储表示,并根据存储计算顶点的出度和入度,然后按照要求输出图的基本信息。
三、主要设备及软件
WinTc
四、实验流程、操作步骤或核心代码、算法片段
无向图和有向图的邻接矩阵存储
#include
#defineinfinity-
#definemax_vertex_num20
typedefenum{UDG=1,DG}graphkind;
typedefstructarccell{
charadj;
}arccell,adjmatrix[max_vertex_num][max_vertex_num];
typedefstruct{
charvexs[max_vertex_num];
adjmatrixarcs;
intvexnum,arcnum;
graphkindkind;
}mgraph;
intlocatevex(mgraph*g,char*arc1)
{inti;
for(i=0;i
if(g->vexs[i]==*arc1)
returni;
}
voidcreateDG(mgraph*g){
inti,j,k;char*tarc,*harc,zifu;
printf("enterthenumforG'svexnum,arcnum,andgraphkind:
\n");
scanf("%d%d%d",&g->vexnum,&g->arcnum,&g->kind);
for(i=0;i
printf("enterthevex\n");
zifu=getchar();
scanf("%c",&g->vexs[i]);}
for(i=0;i
for(j=0;j
g->arcs[i][j].adj='0';}
}
for(k=0;k
zifu=getchar();
printf("enteronearc'vex\n");
scanf("%c",tarc);
zifu=getchar();
scanf("%c",harc);
i=locatevex(g,tarc);j=locatevex(g,harc);
g->arcs[i][j].adj='1';
}
}
voidcreateUDG(mgraph*g){
inti,j,k,x,y;char*arc1,*arc2,zifu;
printf("enterthenumforG'svexnum,arcnum,andgraphkind:
\n");
scanf("%d%d%d",&g->vexnum,&g->arcnum,&g->kind);
for(i=0;i
printf("enterthevex\n");
zifu=getchar();
scanf("%c",&g->vexs[i]);}
for(i=0;i
for(j=0;j
g->arcs[i][j].adj='0';
for(k=0;k
zifu=getchar();
printf("enteronearc'vex\n");
scanf("%c",arc1);
zifu=getchar();
scanf("%c",arc2);
x=locatevex(g,arc1);y=locatevex(g,arc2);
g->arcs[x][y].adj='1';
g->arcs[y][x].adj='1';}
}
voiddegree(mgraph*g){
inti,j,counter=0,sum=0;
if(g->kind==DG){
for(i=0;i
for(j=0;j
if(g->arcs[i][j].adj=='1')
counter++;}
printf("theoutdegreeof%cis%d\n",g->vexs[i],counter);
for(j=0;j
if(g->arcs[j][i].adj=='1')
counter++;}
printf("thedegreeof%cis%d\n",g->vexs[i],counter);
counter=0;
}
}
if(g->kind==UDG){
for(i=0;i
for(j=0;j
if(g->arcs[i][j].adj=='1')
sum++;
}
printf("thedegreeof%cis%d\n",g->vexs[i],sum);
sum=0;
}
}
}
voidprint(mgraph*g){
inti,j;
printf("thegraphis\n");
for(i=0;i
printf("\t%c",g->vexs[i]);
}
printf("\n");
for(i=0;i
printf("%c\t",g->vexs[i]);
for(j=0;j
printf("%c\t",g->arcs[i][j].adj);}
printf("\n");
}
}
main(){
intk,m,n;mgraphG;charbiao,sign;
while(biao!
='#'){
printf("pleasemakeyourchioce:
1--createUDG;2--createDG\n");
scanf("%d",&k);
switch(k){
case1:
createUDG(&G);
print(&G);
degree(&G);
break;
case2:
createDG(&G);
print(&G);
degree(&G);
break;
}
sign=getchar();
printf("enteryourchoice'#'forquit\n");
scanf("%c",&biao);
}
getch();
}
邻接表存储
#include
#definenull0
#definemax_vertex_num20
typedefenum{DG=1}graphkind;
typedefstructarcnode{
intadjvex;
structarcnode*nextarc;
}arcnode;
typedefstructvnode{
chardata;
arcnode*firstarc;
}vnode,adjlist[max_vertex_num];
typedefstruct{
adjlistvertices;
intvexnum,arcnum;
graphkindkind;
}algraph;
voidcreateDG(algraph*g){
inti,j;arcnode*p,*q;charover='h',biao;
printf("pleaseenternumforG'svexnum,arcnum,kind:
\n");
scanf("%d%d%d",&g->vexnum,&g->arcnum,&g->kind);
for(i=0;i
printf("enterthevex\n");
biao=getchar();
scanf("%c",&g->vertices[i].data);
g->vertices[i].firstarc=null;}
for(i=0;i
printf("pleasecreatethe%dsinglelinkof%c\n",i+1,g->vertices[i].data);
over='h';
while(over!
='$'){
if(g->vertices[i].firstarc==null){
printf("ifthesinglelinkhasnodegreepleaseinput'$'\n");
biao=getchar();
scanf("%c",&over);
if(over=='$')
break;
else{
p=(arcnode*)malloc(sizeof(arcnode));
printf("enterthepositionoffirstadjvex:
\n");
scanf("%d",&p->adjvex);
g->vertices[i].firstarc=p;
p->nextarc=null;}
}
else{
q=(arcnode*)malloc(sizeof(arcnode));
printf("enterthepositionofnextadjvex:
\n");
scanf("%d",&q->adjvex);
p->nextarc=q;
q->nextarc=null;}
printf("enter'$'toquitthesinglelinkbecauseithasnodajvex\n");
biao=getchar();
scanf("%c",&over);
}
getch();
}
}
voidoutdegree(algraph*g){
intcount=0,i;arcnode*ptr;
for(i=0;i
if(g->vertices[i].firstarc!
=null){
count++;
ptr=g->vertices[i].firstarc;
for(;ptr->nextarc!
=null;){
ptr=ptr->nextarc;
count++;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告