以邻接表的形式创建一个无向图C语言
时间: 2023-11-24 10:01:25 浏览: 78
以下是以邻接表的形式创建一个无向图的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXV 100 // 最大顶点数
// 边结点
typedef struct EdgeNode {
int adjvex; // 邻接点编号
struct EdgeNode *next; // 指向下一个邻接点的指针
} EdgeNode;
// 顶点结构体
typedef struct VertexNode {
int data; // 顶点数据
EdgeNode *firstedge; // 指向第一个邻接点的指针
} VertexNode;
// 图结构体
typedef struct {
VertexNode adjlist[MAXV]; // 邻接表
int n, e; // 顶点数和边数
} Graph;
// 初始化图
void initGraph(Graph *G) {
int i;
G->n = G->e = 0;
for (i = 0; i < MAXV; i++) {
G->adjlist[i].firstedge = NULL;
}
}
// 添加边
void addEdge(Graph *G, int u, int v) {
EdgeNode *p;
p = (EdgeNode *)malloc(sizeof(EdgeNode));
p->adjvex = v;
p->next = G->adjlist[u].firstedge;
G->adjlist[u].firstedge = p;
p = (EdgeNode *)malloc(sizeof(EdgeNode));
p->adjvex = u;
p->next = G->adjlist[v].firstedge;
G->adjlist[v].firstedge = p;
G->e++;
}
// 输出图
void printGraph(Graph *G) {
int i;
EdgeNode *p;
for (i = 0; i < G->n; i++) {
printf("%d: ", i);
p = G->adjlist[i].firstedge;
while (p) {
printf("%d ", p->adjvex);
p = p->next;
}
printf("\n");
}
}
int main() {
Graph G;
initGraph(&G);
G.n = 4;
addEdge(&G, 0, 1);
addEdge(&G, 0, 2);
addEdge(&G, 1, 2);
addEdge(&G, 1, 3);
printGraph(&G);
return 0;
}
```
以上代码中,我们定义了三个结构体:`EdgeNode`表示边,`VertexNode`表示顶点,`Graph`表示图。在`Graph`结构体中,我们使用邻接表来表示图。在`addEdge`函数中,我们为无向图添加了两条边,同时需要注意的是,我们在邻接表中添加边时,需要同时在两个相邻的顶点的邻接表中添加。最后,在`printGraph`函数中,我们输出整个图的邻接表。
阅读全文