用邻接表储存无向图C语言
时间: 2023-11-24 21:25:15 浏览: 75
以下是使用邻接表储存无向图的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 邻接表节点结构体
typedef struct node {
int dest; // 目标顶点编号
struct node *next; // 下一个邻接节点指针
} Node;
// 邻接表结构体
typedef struct adj_list {
Node *head; // 邻接表头指针
} AdjList;
// 图结构体
typedef struct graph {
int num_vertices; // 顶点数量
AdjList *adj_lists; // 邻接表指针数组
} Graph;
// 创建邻接表节点
Node* create_node(int dest) {
Node* node = (Node*) malloc(sizeof(Node));
node->dest = dest;
node->next = NULL;
return node;
}
// 创建图
Graph* create_graph(int num_vertices) {
Graph* graph = (Graph*) malloc(sizeof(Graph));
graph->num_vertices = num_vertices;
graph->adj_lists = (AdjList*) malloc(num_vertices * sizeof(AdjList));
for (int i = 0; i < num_vertices; i++) {
graph->adj_lists[i].head = NULL;
}
return graph;
}
// 添加边
void add_edge(Graph* graph, int src, int dest) {
// 添加 src -> dest
Node* node = create_node(dest);
node->next = graph->adj_lists[src].head;
graph->adj_lists[src].head = node;
// 添加 dest -> src
node = create_node(src);
node->next = graph->adj_lists[dest].head;
graph->adj_lists[dest].head = node;
}
// 打印邻接表
void print_graph(Graph* graph) {
for (int i = 0; i < graph->num_vertices; i++) {
Node* node = graph->adj_lists[i].head;
printf("Vertex %d: ", i);
while (node != NULL) {
printf("%d -> ", node->dest);
node = node->next;
}
printf("NULL\n");
}
}
int main() {
// 创建一个包含4个顶点的无向图
Graph* graph = create_graph(4);
add_edge(graph, 0, 1);
add_edge(graph, 0, 2);
add_edge(graph, 1, 2);
add_edge(graph, 2, 3);
// 打印邻接表
print_graph(graph);
return 0;
}
```
这段代码会创建一个包含4个顶点的无向图,然后添加4条边,并打印邻接表。你可以根据需要修改顶点数量和边的数量。
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)