c语言中假设图G为无向无权图,以邻接表作为存储结构,实现增加一条边(v,w)。(LocateVex 函数直接调用)
时间: 2023-06-03 20:04:48 浏览: 134
数据结构-c语言-带main函数-图7.2-图的存储结构-图的邻接表的创建-无向图。
5星 · 资源好评率100%
好的,关于你的问题,我们可以先确定边的两个节点 v 和 w 在邻接表中的位置,然后将 w 插入到 v 的邻接表中,并将 v 插入到 w 的邻接表中,完成边的添加操作。具体代码实现可参考以下伪代码:
```c
void InsertEdge(Graph* G, int v, int w) {
// 首先判断 v 和 w 是否已经存在于邻接表中
int vIndex = LocateVex(G, v);
int wIndex = LocateVex(G, w);
if (vIndex == -1 || wIndex == -1) {
printf("Error: Vertex %d or %d not exist!\n", v, w);
return;
}
// 查找 v 的邻接表末尾结点,并在其后面创建新结点 w
Node* pNode_v = G->adjList[vIndex].firstEdge;
while (pNode_v->next != NULL) {
pNode_v = pNode_v->next;
}
Node* pNewNode_v = (Node*)malloc(sizeof(Node));
pNewNode_v->adjvex = w;
pNewNode_v->next = NULL;
pNode_v->next = pNewNode_v;
// 查找 w 的邻接表末尾结点,并在其后面创建新结点 v
Node* pNode_w = G->adjList[wIndex].firstEdge;
while (pNode_w->next != NULL) {
pNode_w = pNode_w->next;
}
Node* pNewNode_w = (Node*)malloc(sizeof(Node));
pNewNode_w->adjvex = v;
pNewNode_w->next = NULL;
pNode_w->next = pNewNode_w;
}
```
阅读全文