数据结构无向图的增删改查c语言
时间: 2024-06-20 16:01:25 浏览: 9
在C语言中,无向图(Undirected Graph)的数据结构通常不直接内置,但可以通过自定义结构体和邻接表或邻接矩阵的方式来实现。这里我会简要介绍如何使用邻接表实现基本的增删改查操作:
1. 定义图结构:
```c
typedef struct {
int vertex; // 节点值
struct Node *adj; // 邻接表的头节点
} Vertex;
typedef struct Node {
Vertex *data;
struct Node *next;
} Edge;
```
2. 增加节点(插入顶点):
```c
void addVertex(Edge **adj, int vertex) {
Vertex *newNode = (Vertex *)malloc(sizeof(Vertex));
newNode->vertex = vertex;
newNode->adj = NULL;
if (*adj == NULL) {
*adj = newNode;
} else {
Edge *temp = *adj;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
```
3. 添加边(连接两个节点):
```c
void addEdge(Edge **adj, int src, int dest) {
Edge *newEdge = (Edge *)malloc(sizeof(Edge));
newEdge->data = (Vertex *)malloc(sizeof(Vertex));
newEdge->data->vertex = dest;
newEdge->data->adj = adj[src]; // 指向源节点的邻接表
newEdge->next = NULL;
if (*adj[src] == NULL) {
*adj[src] = newEdge;
} else {
Edge *temp = *adj[src];
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newEdge;
}
}
```
4. 删除节点:
```c
void deleteVertex(Edge **adj, int vertex) {
Edge *temp = *adj, *prev = NULL;
while (temp != NULL) {
if (temp->data->vertex == vertex) {
if (prev == NULL) { // 如果是第一个节点
*adj = temp->next;
} else {
prev->next = temp->next;
}
free(temp->data);
free(temp);
return;
}
prev = temp;
temp = temp->next;
}
}
```
5. 删除边:
```c
void deleteEdge(Edge **adj, int src, int dest) {
Edge *temp = *adj;
while (temp != NULL) {
if (temp->data->vertex == src && temp->next->data->vertex == dest) {
Edge *prev = temp;
Edge *next = temp->next->next;
prev->next = next;
free(temp->data);
free(temp);
return;
}
temp = temp->next;
}
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)