图---删除指定弧(邻接表)

为君一笑 提交于 2019-12-02 16:32:37
typedef struct arcnode    //边节点
{
    int adjvex;
    struct arcnode* nextarc;
    int weight;
}arcnode;
typedef struct vnode //顶点节点
{
    int data;
    arcnode* firstarc;
}vnode, adjlist[100];//邻接表
typedef struct Graph    //图结构
{
    adjlist ver;
    int vernum, arcnum;
}Graph;

void Delete(adjlist g, int i, int j)
{
    arcnode *p,*pre;
    p = g[i].firstarc;
    pre = NULL;
    while (p)
    {
        if (p->adjvex == j)//找到弧
        {
            if (pre == null)//此节点第一条弧
            {
                g[i].firstarc = p->nextarc;
            }
            else//删除操作
            {
                pre->nextarc = p->nextarc;
                free(p);
            }
        }
        else//未找到,继续搜索
        {
            pre = p;
            p = p->nextarc;
        }
    }
    p = g[j].firstarc;//无向图搜索两个方向
    pre = NULL;
    while (p)
    {
        if (p->adjvex == i)//找到弧
        {
            if (pre == null)//此节点第一条弧
            {
                g[j].firstarc = p->nextarc;
            }
            else//删除操作
            {
                pre->nextarc = p->nextarc;
                free(p);
            }
        }
        else//未找到,继续搜索
        {
            pre = p;
            p = p->nextarc;
        }
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!