请写出无向图邻接表删除边的c语言代码
时间: 2024-09-17 14:07:13 浏览: 46
在无向图的邻接表表示中,删除一条边通常涉及修改两个节点的邻接列表。下面是一个简单的C语言示例,假设我们有一个邻接表存储在一个二维数组`adjList`中,其中`adjList[i]`对应于节点i的邻居列表,每个元素是一个指向该节点的指针。删除边(u, v)意味着从`adjList[u]`中移除v,从`adjList[v]`中移除u:
```c
#include <stdio.h>
#include <stdlib.h>
// 假设节点结构体 Node 和整数类型的边 struct Edge
typedef struct Node {
int data;
struct Edge* next;
} Node;
struct Edge {
int target; // 被连接的节点
};
void deleteEdge(Node* adjList, int u, int v) {
if (adjList[u] != NULL && adjList[u]->target == v) { // 如果u指向v
Node* temp = adjList[u];
adjList[u] = adjList[u]->next; // 将u指向下一个邻居
free(temp); // 释放已删除的边
}
if (adjList[v] != NULL && adjList[v]->target == u) { // 如果v指向u
Node* temp = adjList[v];
adjList[v] = adjList[v]->next; // 将v指向下一个邻居
free(temp); // 释放已删除的边
}
}
// 示例:创建和初始化邻接表
void initAdjList(Node** adjList, int numNodes) {
for (int i = 0; i < numNodes; i++) {
adjList[i] = (Node*)malloc(sizeof(Node)); // 初始化每个节点的next为NULL
adjList[i]->next = NULL;
}
}
// 示例:添加边
void addEdge(Node* adjList, int u, int v) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->target = v;
newNode->next = adjList[u]; // 将新的边插入到u的链表中
adjList[u] = newNode;
}
```
这个代码片段仅作示例,实际应用时你需要处理可能出现的边界情况,例如节点不存在等。
阅读全文