c语言无向图创建邻接表
时间: 2023-12-03 16:05:21 浏览: 80
无向图的邻接表构建和遍历
5星 · 资源好评率100%
创建邻接表可以通过链式存储结构实现。具体步骤如下:
1. 定义结构体`Node`表示图中的一个节点,其中包含一个整型变量`vertex`表示节点编号以及一个指向`struct Node`的指针`next`表示该节点的下一个节点。
```
struct Node {
int vertex;
struct Node* next;
};
```
2. 定义一个数组`adjList`,数组的每个元素是一个指向`struct Node`的指针,数组元素的下标表示节点的编号。
```
struct Node* adjList[MAX_N];
```
3. 对于每一条边(u, v),创建一个新的节点`newNode`,将节点的`vertex`设置为v,然后将`newNode`插入到节点u的邻接表中。具体实现如下:
```
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->vertex = v;
newNode->next = adjList[u];
adjList[u] = newNode;
```
完整代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000
struct Node {
int vertex;
struct Node* next;
};
struct Node* adjList[MAX_N]; // 邻接表
void addEdge(int u, int v) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->vertex = v;
newNode->next = adjList[u];
adjList[u] = newNode;
}
int main() {
int n, m; // n为节点数,m为边数
scanf("%d %d", &n, &m);
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d %d", &u, &v);
addEdge(u, v);
addEdge(v, u); // 如果是无向图,还需要加上边(v, u)
}
return 0;
}
```
阅读全文