#include<stdio.h>
#include<stdlib.h>
#define MVNum 100
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
char data;
ArcNode *firstarc;
}VNode,AdjList[MVNum];
typedef struct
{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
int LocateVex(ALGraph G,char v)
{
for(int i=0;i<G.vexnum;i++)
if(G.vertices[i].data==v)
return i;
}
//算法6.2采用邻接表表示法创建无向图
int CreateUDG(ALGraph *G)
{
char a;
printf("输入总顶点数,总边数,并用“,”隔开:\n");
scanf("%d,%d",&G->vexnum,&G->arcnum);
scanf("%c",&a);
printf("依次输入顶点的信息:");
for(int i=0;i<G->vexnum;i++)
{
scanf("%c",&G->vertices[i].data);
G->vertices[i].firstarc=NULL;
}
scanf("%c",&a);
printf("开始构造邻接表:");
char v1,v2;int i,j;
ArcNode *p1=NULL,*p2=NULL;
for(int k=0;k<G->arcnum;k++)
{
printf("\n输入一条边依附的顶点:");
scanf("%c%c",&v1,&v2);
scanf("%c",&a);
i=LocateVex(*G,v1);j=LocateVex(*G,v2);
printf("%d,%d",i,j);
p1=(ArcNode *)malloc(sizeof(ArcNode));
p1->adjvex=j;
p1->nextarc=G->vertices[i].firstarc;
G->vertices[i].firstarc=p1;
p2=(ArcNode *)malloc(sizeof(ArcNode));
p2->adjvex=i;
p2->nextarc=G->vertices[j].firstarc;
G->vertices[j].firstarc=p2;
}
return 0;
}
//补.遍历
int PrintVex(ALGraph G)
{
for(int i=0;i<G.vexnum;i++)
{
printf("vertices[%d]=%c ",i,G.vertices[i].data);
ArcNode *p=G.vertices[i].firstarc;
while(p!=NULL)
{
printf("%d ",p->adjvex);
p=p->nextarc;
}
printf("\n");
}
return 0;
}
int main()
{
ALGraph G;
CreateUDG(&G);
PrintVex(G);
return 0;
}
【数据结构C语言】邻接表
最新推荐文章于 2024-04-21 19:51:15 发布