c语言以邻接表的形式创建一个无向图
时间: 2023-11-24 15:09:21 浏览: 169
以下是使用邻接表表示法创建无向图的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 邻接表结点结构体
typedef struct node
{
int vertex; // 顶点
struct node *next; // 指向下一个结点的指针
} Node;
// 图结构体
typedef struct graph
{
int numVertices; // 图中顶点的数量
Node **adjLists; // 邻接表数组
} Graph;
// 创建邻接表结点
Node* createNode(int v)
{
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->vertex = v;
newNode->next = NULL;
return newNode;
}
// 创建图
Graph* createGraph(int vertices)
{
Graph *graph = (Graph*)malloc(sizeof(Graph));
graph->numVertices = vertices;
// 创建邻接表数组
graph->adjLists = (Node**)malloc(vertices * sizeof(Node*));
// 将邻接表数组中的每一个指针初始化为NULL
int i;
for (i = 0; i < vertices; i++)
graph->adjLists[i] = NULL;
return graph;
}
// 添加边
void addEdge(Graph *graph, int src, int dest)
{
// 添加src到dest的边
Node *newNode = createNode(dest);
newNode->next = graph->adjLists[src];
graph->adjLists[src] = newNode;
// 添加dest到src的边
newNode = createNode(src);
newNode->next = graph->adjLists[dest];
graph->adjLists[dest] = newNode;
}
// 打印图
void printGraph(Graph *graph)
{
int i;
for (i = 0; i < graph->numVertices; i++)
{
printf("顶点 %d 的邻居:", i);
Node *temp = graph->adjLists[i];
while (temp)
{
printf("%d -> ", temp->vertex);
temp = temp->next;
}
printf("NULL\n");
}
}
int main()
{
// 创建一个包含5个顶点的无向图
Graph *graph = createGraph(5);
addEdge(graph, 0, 1);
addEdge(graph, 0, 4);
addEdge(graph, 1, 2);
addEdge(graph, 1, 3);
addEdge(graph, 1, 4);
addEdge(graph, 2, 3);
addEdge(graph, 3, 4);
// 打印图
printGraph(graph);
return 0;
}
```
在上面的代码中,我们使用了邻接表表示法来创建无向图。createNode()函数用于创建邻接表结点,createGraph()函数用于创建图,addEdge()函数用于添加边,printGraph()函数用于打印图。在main()函数中,我们创建了一个包含5个顶点的无向图,并添加了一些边。最后,我们打印了图的邻接表表示形式。
阅读全文