领接表创建有向图c语言
时间: 2024-11-19 14:16:35 浏览: 6
领接表是一种数据结构,用于表示有向图。在C语言中,我们可以使用链表来构建领接表。以下是基本步骤:
1. **定义节点**:首先,定义一个`Node`结构体,包含一个指向相邻节点的指针和一个表示连接到的顶点的值。
```c
typedef struct Node {
int vertex; // 节点连接的顶点
struct Node* next; // 指向下一个节点的指针
} Node;
```
2. **定义图的数据结构**:创建一个`AdjacencyList`结构体,它包含一个数组来存储所有节点,并一个计数器来跟踪节点的数量。
```c
typedef struct AdjList {
int vertices;
Node** adjList;
} AdjacencyList;
```
3. **初始化领接表**:为每个顶点分配一个`Node`,并将它们添加到相应的索引位置。
```c
void createAdjacencyList(AdjacencyList* graph, int vertices) {
graph->vertices = vertices;
graph->adjList = (Node**)malloc(sizeof(Node*) * vertices);
for (int i = 0; i < vertices; i++) {
graph->adjList[i] = NULL;
}
}
```
4. **插入边**:当需要添加从顶点A到顶点B的边时,可以在`graph->adjList[A]`找到对应的`Node`并设置其`next`指针。
```c
void addEdge(AdjacencyList* graph, int source, int destination) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->vertex = destination;
newNode->next = graph->adjList[source];
graph->adjList[source] = newNode;
}
```
5. **遍历和访问**:可以使用递归或迭代的方式遍历图,例如深度优先搜索(DFS)或广度优先搜索(BFS)。
```c
void traverseGraphDFS(AdjacencyList* graph, int vertex, void (*visit)(int)) {
Node* current = graph->adjList[vertex];
while (current != NULL) {
visit(current->vertex);
current = current->next;
}
}
// 示例函数,打印节点值
void printVertex(int v) {
printf("%d ", v);
}
```
阅读全文