数据结构图子系统.docx
- 文档编号:23616134
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:10
- 大小:15.52KB
数据结构图子系统.docx
《数据结构图子系统.docx》由会员分享,可在线阅读,更多相关《数据结构图子系统.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构图子系统
/*
*题目:
编写按键盘输入的数据建立图的邻接矩阵存储
*编写图的深度优先遍历程序
*编写图的广度优先遍历程序
*设计一个选择式菜单形式如下:
*图子系统
************************************
**1------更新邻接矩阵*
**2------深度优先遍历*
**3------广度优先遍历*
**0------返回*
************************************
*请选择菜单号(0--3):
*/
#include
#include
#defineGRAPHMAX30
#defineQUEUEMAX30
typedefstruct//图的邻接表的结构体
{
charvalue[GRAPHMAX];//记录图中的点值
intdata[GRAPHMAX][GRAPHMAX];//记录图中的边的关系
intn,e;//记录图中的点的个数及边的个数
}pGraph;
typedefstruct//队列结构体
{
intqueueData[QUEUEMAX];
intfront,rear,count;//队头,队尾,数目
}grQueue;
voidcreateCraph(pGraph*G);
voidDFSTraverse(pGraph*G);
voidBFSTraverse(pGraph*G);
voidDFS(pGraph*G,inti);
voidBFS(pGraph*G,inti);
voidinitQueue(grQueue*Q);
intqueueEmpty(grQueue*Q);
intqueueFull(grQueue*Q);
intoutQueue(grQueue*Q);
voidinQueue(grQueue*Q,inti);
intvisited[GRAPHMAX];//用于标志性的数组(全局变量)
voidmain()
{
pGraphG;
intchoice,i,j,k=1;
printf("建立一个有向图的邻接矩阵表示\n");
createCraph(&G);
printf("已建立一个图的邻接矩阵存储\n\n");
for(i=0;i { for(j=0;j { printf("%5d",G.data[i][j]); } printf("\n"); } while(k) { printf("\n图子系统\n"); printf("***********************************\n"); printf("*1------更新邻接矩阵*\n"); printf("*2------深度优先遍历*\n"); printf("*3------广度优先遍历*\n"); printf("*0------返回*\n"); printf("***********************************\n"); printf("请选择菜单号(0--3): "); fflush(stdin); scanf("%d",&choice); switch(choice) { case1: createCraph(&G); printf("图的邻接矩阵存储成功\n\n"); break; case2: DFSTraverse(&G); break; case3: BFSTraverse(&G); break; case0: k=0; break; default: printf("输入错误,请重新输入。 "); getchar(); k=1; break; } } } voidcreateCraph(pGraph*G)//建立邻接表 { inti,j,k; charch1,ch2; printf("请输入定点数,边数(格式如3,3): "); scanf("%d,%d",&(G->n),&(G->e)); for(i=0;i { getchar(); printf("请输入第%d顶点的值: ",i+1); scanf("%c",&(G->value[i])); } //初始化邻接表 for(i=0;i { for(j=0;j { G->data[i][j]=0; } } for(k=0;k { getchar(); printf("请输入第%d条边的顶点值(格式4,5): ",k+1); scanf("%c,%c",&ch1,&ch2); //构建邻接表 for(i=0;i { if(ch1==G->value[i]) { for(j=0;j { if(ch2==G->value[j]) { G->data[i][j]=1; } } } } } } //深度遍历 voidDFSTraverse(pGraph*G) { inti; for(i=0;i { visited[i]=0; } for(i=0;i { if(! visited[i]) { DFS(G,i); } } } //广度遍历 voidBFSTraverse(pGraph*G) { inti; for(i=0;i { visited[i]=0; } for(i=0;i { if(! visited[i]) { BFS(G,i); } } } voidDFS(pGraph*G,inti) { intj; printf("深度优先遍历序列: %c\n",G->value[i]); visited[i]=1; for(j=0;j { if(G->data[i][j]==1&&! visited[j]) { DFS(G,j); } } } voidBFS(pGraph*G,inti) { intk,j; grQueueQ; initQueue(&Q);//初始化 visited[i]=1; inQueue(&Q,i); while(! queueEmpty(&Q)) { k=outQueue(&Q); printf("广度优先遍历序列: %c\n",G->value[k]); for(j=0;j { if(G->data[k][j]==1&&! visited[j]) { visited[j]=1; inQueue(&Q,j); } } } } voidinitQueue(grQueue*Q)//队列初始化 { Q->front=Q->rear=0; Q->count=0; } intqueueEmpty(grQueue*Q)//队列判空 { returnQ->count==0; } intqueueFull(grQueue*Q)//队列判满 { returnQ->count==QUEUEMAX; } intoutQueue(grQueue*Q)//出队 { inttemp; if(queueEmpty(Q)) { printf("队列为空。 "); return-1; } else { temp=Q->queueData[Q->front];//出队的元素 Q->count--; Q->front=(Q->front+1)%QUEUEMAX; returntemp; } } voidinQueue(grQueue*Q,inti)//入队 { if(queueFull(Q)) { printf("队列已满。 "); return; } else { Q->count++;//数目增加 Q->queueData[Q->rear]=i;//入队 Q->rear=(Q->rear+1)%QUEUEMAX;//队尾指针移动 } } WelcomeTo Download! ! ! 欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构图 子系统