数据结构实验8.docx
- 文档编号:25279731
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:17
- 大小:185.35KB
数据结构实验8.docx
《数据结构实验8.docx》由会员分享,可在线阅读,更多相关《数据结构实验8.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构实验8
1、建立如图所示的图的邻接矩阵和邻接表的数据结构。
//邻接矩阵
#include
#definen8//图的顶点数
#definee9//图的边数
typedefcharvextype;//顶点数据类型
typedefintadjtype;//边的权值类型
typedefstruct
{
vextypevexs[n];
adjtypearcs[n][n];
}graph;
CreateGraph(graph*ga)
{
inti,j,k;charch;
printf("输入顶点数据:
");
for(i=0;i {scanf("%c",&ch); ga->vexs[i]=ch;//读入顶点的信息 } printf("\n"); for(i=0;i { for(j=0;j { ga->arcs[i][j]=0; } } for(k=1;k<=e;k++) { printf("输入第%d条边的两个顶点序号: ",k); scanf("%d%d",&i,&j); ga->arcs[i][j]=1; ga->arcs[j][i]=1; } } main() {inti,j; graphga; CreateGraph(&ga); for(i=0;i { for(j=0;j { printf("%d",ga.arcs[i][j]); } printf("\n"); } } //邻接表 #include #include #defineM100 typedefstructnode//表结点 { intadjvex; structnode*next; }JD; typedefstructtnode//头结点 { intvexdata; structnode*firstarc; }TD; CreateGraph(TDga[],intn) { inta,i,d,index; JD*p; printf("输入顶点信息: "); for(i=1;i<=n;i++) { scanf("%d",&a); ga[i].vexdata=a; } for(i=1;i<=n;i++) { printf("输入第%d个结点的度: ",i); scanf("%d",&d); p=(JD*)malloc(sizeof(JD)); ga[i].firstarc=p; printf("输入第一个相邻顶点的位置: "); scanf("%d",&index); p->adjvex=index; d--; while(d) { p->next=(JD*)malloc(sizeof(JD)*d); p=p->next; printf("输入下一个相邻顶点的位置: "); scanf("%d",&index); p->adjvex=index; d--; } p->next=NULL; } } main() { inti,n; TDga[M]; JD*p; printf("顶点个数为: "); scanf("%d",&n); CreateGraph(ga,n); for(i=1;i<=n;i++) { printf("%d",ga[i].vexdata); for(p=ga[i].firstarc;p! =NULL;p=p->next) { printf("%d",p->adjvex); } printf("\n"); } } 2、实现图的深度和广度优先遍历的非递归函数 //深度遍历 #include #include #defineM100 #defineFALSE0 #defineTURE1 typedefstructnode//表结点 { intadjvex; structnode*next; }JD; typedefstructtnode//头结点 { intvexdata; structnode*firstarc; }TD; typedefstruct { TDstack[M]; inttop; }Stack; CreateGraph(TDga[],intn) { inta,i,d,index; JD*p; printf("输入顶点信息: "); for(i=1;i<=n;i++) { scanf("%d",&a); ga[i].vexdata=a; } /*for(i=1;i<=n;i++) { printf("%d",ga[i].vexdata); }*/ for(i=1;i<=n;i++) { printf("输入第%d个结点的度: ",i); scanf("%d",&d); p=(JD*)malloc(sizeof(JD)); ga[i].firstarc=p; printf("输入第一个相邻顶点的位置: "); scanf("%d",&index); p->adjvex=index; d--; while(d) { p->next=(JD*)malloc(sizeof(JD)*d); p=p->next; printf("输入下一个相邻顶点的位置: "); scanf("%d",&index); p->adjvex=index; d--; } p->next=NULL; } } DFS(TDga[],intn,intvisit[]) { StackS; JD*p; intv; v=1; S.top=0; S.stack[S.top++]=ga[v]; visit[v]=TURE; while(S.top) { printf("%d",S.stack[S.top-1].vexdata); S.top--; for(p=ga[v].firstarc;p! =NULL;p=p->next) { v=p->adjvex; if(! visit[v]) { S.stack[S.top++]=ga[v]; visit[v]=TURE; } } } } DFS_v(TDga[],intv,intvisit[]) { StackS; JD*p; S.top=0; S.stack[S.top++]=ga[v]; visit[v]=TURE; while(S.top) { printf("%d",S.stack[S.top-1].vexdata); S.top--; for(p=ga[v].firstarc;p! =NULL;p=p->next) { v=p->adjvex; if(! visit[v]) { S.stack[S.top++]=ga[v]; visit[v]=TURE; } } } } main() { intv,n; intvisit[M]; TDga[M]; printf("顶点个数为: "); scanf("%d",&n); CreateGraph(ga,n); for(v=1;v<=n;v++) { visit[v]=FALSE; } DFS(ga,n,visit); for(v=1;v { if(! visit[v]) { DFS_v(ga,v,visit); } } } //广度优先遍历: #include #include #defineM100 #defineFALSE0 #defineTURE1 typedefstructnode//表结点 { intadjvex; structnode*next; }JD; typedefstructtnode//头结点 { intvexdata; structnode*firstarc; }TD; typedefstruct { TDqueue[M]; intfront,rear; }Queue; CreateGraph(TDga[],intn) { inta,i,d,index; JD*p; printf("输入顶点信息: "); for(i=1;i<=n;i++) { scanf("%d",&a); ga[i].vexdata=a; } /*for(i=1;i<=n;i++) { printf("%d",ga[i].vexdata); }*/ for(i=1;i<=n;i++) { printf("输入第%d个结点的度: ",i); scanf("%d",&d); p=(JD*)malloc(sizeof(JD)); ga[i].firstarc=p; printf("输入第一个相邻顶点的位置: "); scanf("%d",&index); p->adjvex=index; d--; while(d) { p->next=(JD*)malloc(sizeof(JD)*d); p=p->next; printf("输入下一个相邻顶点的位置: "); scanf("%d",&index); p->adjvex=index; d--; } p->next=NULL; } } BFS(TDga[],intn,intvisit[]) { QueueQ; JD*p; intv; v=1; Q.front=0;Q.rear=0; Q.queue[++Q.rear]=ga[v]; visit[v]=TURE; while(Q.front! =Q.rear) { printf("%d",Q.queue[++Q.front].vexdata); for(p=Q.queue[Q.front].firstarc;p! =NULL;p=p->next) { v=p->adjvex; if(! visit[v]) { Q.queue[++Q.rear]=ga[v]; visit[v]=TURE; } } } } BFS_v(TDga[],intv,intvisit[]) { QueueQ; JD*p; Q.front=0;Q.rear=0; Q.queue[++Q.rear]=ga[v]; visit[v]=TURE; while(Q.front! =Q.rear) { printf("%d",Q.queue[++Q.front].vexdata); for(p=Q.queue[Q.front].firstarc;p! =NULL;p=p->next) { v=p->adjvex; if(! visit[v]) { Q.queue[++Q.rear]=ga[v]; visit[v]=TURE; } } } } main() { intv,n; intvisit[M]; TDga[M]; printf("顶点个数为: "); scanf("%d",&n); CreateGraph(ga,n); for(v=1;v<=n;v++) { visit[v]=FALSE; } BFS(ga,n,visit); for(v=1;v { if(! visit[v]) { BFS_v(ga,v,visit); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验
