#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20
typedef struct ArcNode{
int Adjvex;//存储所指顶点的位置
struct ArcNode *nextarc;//指向下一结点
}ArcNode;
typedef struct VNode{
char data;//存储结点
ArcNode *firstarc;//指向第一个顶点
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices;//存储结点数组的别名
int vexnum,arcnum;//节点数和边数
}ALGraph;
int LocateALGraph(ALGraph G, char v){
int i;
//返回结点的相应位置
for(i = 0; i < G.vexnum; i ++){
if(G.vertices[i].data == v)
return i;
}
return -1;
}
void CreateAdjList(ALGraph &G){
int i,j,k;
char v1,v2;
ArcNode *s,*p;
scanf("%d%d",&G.vexnum,&G.arcnum);//输入边数和节点数
getchar();
for(i = 0; i < G.vexnum; i ++){
scanf("%c",&G.vertices[i].data);
G.vertices[i].firstarc = NULL;//输入结点,并为指针赋值为空
}
for(i = 0; i < G.arcnum; i ++){
getchar();
scanf("%c%c",&v1,&v2);//输入边
k = LocateALGraph(G,v1); j = LocateALGraph(G,v2);//返回相应位置
s = (ArcNode *)malloc(sizeof(ArcNode));
s->Adjvex = j; s->nextarc = NULL;//用s来存储相应位置的值
p = G.vertices[i].firstarc;//让p指向头结点所指的第一个元素
if(!p){
G.vertices[i].firstarc = s;//如果p为空,则证明第一个所指结点为空,直接链接上即可
}
else{
while(p->nextarc)
p = p->nextarc;//找到为空的
p->nextarc = s;
}
}
}
int main(){
ALGraph G;
CreateAdjList(G);
return 0;
}
邻接表存储图
最新推荐文章于 2022-09-20 16:58:35 发布