用C语言建立一个以邻接表形式存储的图
时间: 2024-02-13 19:59:36 浏览: 135
以邻接表的形式建立和存储图
5星 · 资源好评率100%
可以使用结构体和指针来建立邻接表形式的图。以下是一个简单的示例:
```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;
}
```
在这个示例中,我们使用了 `struct node` 来表示图中的每个节点,其中包含了节点的值以及指向下一个节点的指针。我们还使用了 `struct Graph` 来表示整个图,其中包含了节点的数量以及指向邻接表的指针数组。在 `createGraph` 函数中,我们分配了足够的内存来存储整个图以及邻接表。在 `addEdge` 函数中,我们创建了一个新的节点,并将其添加到源节点和目标节点的邻接表中。最后,在 `printGraph` 函数中,我们遍历整个图,并打印每个节点的邻接表。
阅读全文