数据结构-图的存储-邻接表创建
源代码
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 20
typedef char VertexType;
typedef struct EdgeNode {
int adjvex;
struct EdgeNode *next;
}EdgeNode;
typedef struct VertexNode {
VertexType data;
EdgeNode *firstedge;
}VertexNode, AdjList[MAXVEX];
typedef struct {
AdjList adjlist;
int numVertexes, numEdges;
}GraphAdjList;
void Create(GraphAdjList *G) {
int i, j, k;
EdgeNode *e;
printf("输入顶点数和边数:\n");
scanf_s("%d%d", &G->numVertexes, &G->numEdges);
printf("输入顶点信息:\n");
for (i = 0; i<G->numVertexes; i++) {
getchar();
scanf_s("%c", &G->adjlist[i].data);
G->adjlist[i].firstedge = NULL;
}
printf("输入边(Vi,Vj)中的下标i,j:\n");
for (k = 0; k<G->numEdges; k++) {
scanf_s("%d%d", &i, &j);
e = (EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex = j;
e->next = G->adjlist[i].firstedge;
G->adjlist[i].firstedge = e;
e = (EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex = i;
e->next = G->adjlist[j].firstedge;
G->adjlist[j].firstedge = e;
}
printf("邻接表为:\n");
for (i = 0; i<G->numVertexes; i++) {
e = G->adjlist[i].firstedge;
while (e) {
printf("(%c,%c)", G->adjlist[i].data, G->adjlist[e->adjvex].data);
e = e->next;
}
printf("\n");
}
}
int main() {
GraphAdjList G;
Create(&G);
system("pause");
}
运行结果