利用C语言完成无向图的邻接表算法
时间: 2023-07-26 21:46:00 浏览: 89
好的,我可以为您解答这个问题。以下是利用C语言完成无向图的邻接表算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int vertex;
struct Node* next;
};
struct Graph {
int numVertices;
struct Node** adjLists;
};
struct Node* createNode(int v) {
struct Node* newNode = malloc(sizeof(struct Node));
newNode->vertex = v;
newNode->next = NULL;
return newNode;
}
struct Graph* createGraph(int vertices) {
struct Graph* graph = malloc(sizeof(struct Graph));
graph->numVertices = vertices;
graph->adjLists = malloc(vertices * sizeof(struct Node*));
int i;
for (i = 0; i < vertices; i++)
graph->adjLists[i] = NULL;
return graph;
}
void addEdge(struct Graph* graph, int src, int dest) {
struct Node* newNode = createNode(dest);
newNode->next = graph->adjLists[src];
graph->adjLists[src] = newNode;
newNode = createNode(src);
newNode->next = graph->adjLists[dest];
graph->adjLists[dest] = newNode;
}
void printGraph(struct Graph* graph) {
int v;
for (v = 0; v < graph->numVertices; v++) {
struct Node* temp = graph->adjLists[v];
printf("\n Adjacency list of vertex %d\n ", v);
while (temp) {
printf("%d -> ", temp->vertex);
temp = temp->next;
}
printf("NULL\n");
}
}
int main() {
struct Graph* graph = createGraph(4);
addEdge(graph, 0, 1);
addEdge(graph, 0, 2);
addEdge(graph, 1, 2);
addEdge(graph, 2, 3);
printGraph(graph);
return 0;
}
```
这个示例代码中,我们首先定义了Node结构体,表示每一个节点,其中包含一个vertex属性表示节点的编号,以及一个next属性表示下一个节点的指针。接着,我们定义了Graph结构体,表示整张图,其中包含一个numVertices属性表示节点的数量,以及一个adjLists属性表示每一个节点的邻接表。createNode函数用于创建一个新的节点,createGraph函数用于创建一个新的图。addEdge函数用于向图中添加一条边,printGraph函数用于打印整张图的邻接表。在main函数中,我们首先创建了一个包含4个节点的图,并向其中添加了4条边,最后打印了整张图的邻接表。
希望这个示例代码能够帮助您理解如何利用C语言完成无向图的邻接表算法。
阅读全文