c语言编写完整代码 假设带权有向图采用邻接表存储,顶点i,j已存在,设计一个算法删除一条给定的边<i,j>

首先,我们需要定义一个邻接表的结构体,代码如下:

struct EdgeNode { int adjvex; // 邻接点的下标 int weight; // 边的权值 struct EdgeNode *next; // 指向下一条边的指针 };

struct VertexNode { int data; // 顶点的数据域 struct EdgeNode *firstedge; // 指向第一条边的指针 };

struct AdjList { struct VertexNode adjList[MAX_VERTEX_NUM]; // 邻接表 int n, e; // 顶点数和边数 };

其中,MAX_VERTEX_NUM是最大顶点数,adjList数组是邻接表,n是顶点数,e是边数。

然后,我们就可以开始写删除边的算法了。我们可以在邻接表中查找给定的边<i, j>,然后删除它。具体的,我们可以使用指针来遍历邻接表,并找到给定的边。具体实现如下:

void DeleteEdge(AdjList *G, int i, int j) { // 找到给定的边<i, j> EdgeNode *p = G->adjList[i].firstedge; EdgeNode *q = NULL; // q用于记录p的前驱 while (p != NULL && p->adjvex != j) { q = p; p = p->next; } if (p == NULL) { // 没有找到给定的边<i, j> return; } // 找到了给定的边<i, j> if (q == NULL) { // p是邻接表的第一个节点 G->adjList[i].firstedge = p->next; } else { q->next = p->next; } // 释放p节点所

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值