以邻接表作为存储结构,删除顶点v及其相关的边,函数为DeleteVex(G,V)的C语言完整代码
时间: 2024-06-14 16:04:18 浏览: 71
以下是以邻接表作为存储结构,删除顶点v及其相关的边的C语言完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
// 边表结点
typedef struct ArcNode {
int adjvex; // 该边所指向的顶点的位置
struct ArcNode *next; // 指向下一条边的指针
} ArcNode;
// 顶点表结点
typedef struct VNode {
int data; // 顶点的数据
ArcNode *firstarc; // 指向第一条依附该顶点的边的指针
} VNode, AdjList[MAX_VERTEX_NUM];
// 图的邻接表存储结构
typedef struct {
AdjList vertices; // 邻接表
int vexnum; // 顶点数
int arcnum; // 边数
} ALGraph;
// 删除顶点v及其相关的边
void DeleteVex(ALGraph *G, int v) {
ArcNode *p, *q;
int i;
// 删除顶点v的边
p = G->vertices[v].firstarc;
while (p != NULL) {
q = p;
p = p->next;
free(q);
G->arcnum--;
}
G->vertices[v].firstarc = NULL;
// 删除其他顶点指向顶点v的边
for (i = 0; i < G->vexnum; i++) {
if (i != v) {
p = G->vertices[i].firstarc;
while (p != NULL) {
if (p->adjvex == v) {
q = p;
p = p->next;
free(q);
G->arcnum--;
} else {
p = p->next;
}
}
}
}
// 删除顶点v
for (i = v; i < G->vexnum - 1; i++) {
G->vertices[i] = G->vertices[i + 1];
}
G->vexnum--;
}
int main() {
ALGraph G;
int v;
// 初始化图G
// 调用DeleteVex函数删除顶点v及其相关的边
DeleteVex(&G, v);
return 0;
}
```
阅读全文