C语言实现六个顶点邻接表的全代码
时间: 2023-10-26 11:30:06 浏览: 77
以下是C语言实现六个顶点邻接表的完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 邻接表结构体
typedef struct GraphNode {
int vertex; // 顶点
struct GraphNode* next; // 指向下一个节点的指针
} GraphNode;
// 图结构体
typedef struct Graph {
int num_vertices; // 顶点个数
GraphNode** adj_lists; // 邻接表数组
} Graph;
// 创建图
Graph* create_graph(int num_vertices) {
Graph* graph = (Graph*)malloc(sizeof(Graph));
graph->num_vertices = num_vertices;
graph->adj_lists = (GraphNode**)malloc(num_vertices * sizeof(GraphNode*));
for (int i = 0; i < num_vertices; i++) {
graph->adj_lists[i] = NULL;
}
return graph;
}
// 添加边
void add_edge(Graph* graph, int src, int dest) {
// 在 src 邻接表中添加 dest 节点
GraphNode* new_node = (GraphNode*)malloc(sizeof(GraphNode));
new_node->vertex = dest;
new_node->next = graph->adj_lists[src];
graph->adj_lists[src] = new_node;
// 在 dest 邻接表中添加 src 节点
new_node = (GraphNode*)malloc(sizeof(GraphNode));
new_node->vertex = src;
new_node->next = graph->adj_lists[dest];
graph->adj_lists[dest] = new_node;
}
// 打印图
void print_graph(Graph* graph) {
for (int i = 0; i < graph->num_vertices; i++) {
GraphNode* current_node = graph->adj_lists[i];
printf("顶点 %d 的邻接表:", i);
while (current_node != NULL) {
printf("%d -> ", current_node->vertex);
current_node = current_node->next;
}
printf("NULL\n");
}
}
int main() {
// 创建图
Graph* graph = create_graph(6);
// 添加边
add_edge(graph, 0, 1);
add_edge(graph, 0, 2);
add_edge(graph, 1, 2);
add_edge(graph, 1, 4);
add_edge(graph, 2, 3);
add_edge(graph, 3, 4);
// 打印图
print_graph(graph);
return 0;
}
```
这段代码实现了一个有6个顶点的无向图的邻接表表示法,并且添加了六条边。函数 `create_graph()` 用于创建图,函数 `add_edge()` 用于添加边,函数 `print_graph()` 用于打印图。在 `main()` 函数中,我们创建了一个图并添加了六条边,然后打印了这个图的邻接表。
阅读全文