0
点赞
收藏
分享

微信扫一扫

邻接表删除

简单聊育儿 2022-04-30 阅读 64

#include <stdio.h>
#include "graph.h" //请勿删除,否则检查不通过
#include<stdlib.h>

bool del_vertex(ListGraph* G, VertexType v)
{
    int a;
    a=locate_vertex(G,v);
    if(a==-1)return false;
    
    while(G->vertex[a].firstarc){
    ArcNode* p=G->vertex[a].firstarc;
    if(p->nextarc){
    ArcNode* temp=p->nextarc;
    p->nextarc=temp->nextarc;
    free(temp);    
}
    else{
    free(p);    
    G->vertex[a].firstarc=null;
}G->vexnum--;
    }G->arcnum--;//先把V为头的节点全部删掉
//再将辅助数组里面的元素往前移
for(int i=a;i<G->vexnum;i++){
G->vertex[i]=G->vertex[i+1]
}
//再将每一个指向V的节点删除
for(int i=0;i<G->vexnum;i++){
    ArcNode* p=G->vertex[i].firstarc;
    ArcNode* pre=null;ArcNode* temp;
while(p){
    if(p->adjvex==v){
if(pre==NULL)//p是头节点{
temp=p;G->vertex[i].firstarc=p->nextarc;
}else{temp=p;pre->nextarc=p->nextarc;}
        }
free(temp);
p=p->nextarc;
G->vexnum--;
else{pre=p;p=p->nextarc;
}
    }
}
}

 

举报

相关推荐

0 条评论