邻接表建立图

#include <iostream>

typedef int vertex;  //用顶点下标表示顶点 

typedef struct adjvnode * ptrtoadjvnode;
struct adjvnode
{
    vertex adjv;        //邻接点下标 
    weighttype weight;  //边权重 
    ptrtoadjvnode next;
};

typedef struct vnode
{
    ptrtoadjvnode firstedge;
    //datatype data;          //顶点的数据 
}adjlist[maxnum];             //邻接表的类型 

typedef struct gnode * lgraph;
struct gnode
{
    int nv;      //顶点数 
    int ne;      //边数 
    adjlist g;   //邻接表 
};


lgraph createlist(int vertexnum)
{
    lgraph graph;
    vertex v, w;
    
    graph = (lgraph)malloc(sizeof(struct gnode))
    graph->nv = vertexnum;
    graph->ne = 0;
    
    for(v = 0; v < graph->nv; v++)
    {
        graph->g[v].firstedge = NULL;
    }
    
    return graph;
}


//向图中插入边
typedef struct enode * edge;
struct enode
{
    vertex v1, v2;        //有向边 
    weighttype weight;   //权重 
};

void insertedge(lgraph graph, edge e)
{
    //***********<插入边 v1, v2>************ 
    ptrtoadjvnode newnode;
    
    //为v2建立新的邻接点 
    newnode = (ptrtoadjvnode)malloc(sizeof(struct adjvnode));
    newnode->adjv = e->v2;
    newnode->weight = e->weight;
    
    //将v2插入v1的表头 
    newnode->next = graph->g[e->v1].firstedge;
    graph->g[e->v1].firstedge = newnode;
    
    
    //**********<若是无向图,还要插入v2, v1> 
    //为v1建立新的邻接点 
    ptrtoadjvnode newnode;
    newnode = (ptrtoadjvnode)malloc(sizeof(struct adjvnode));
    newnode->adjv = e->v1;
    newnode->weight = e->weight;
    
    //将v1插入v2表头 
    newnode->next = graph->g[e->v2].firstedge;
    graph->g[e->v2].firstedge = newnode;    
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值