图的存储结构

1、邻接矩阵。使用二位数组存储。
2、邻接表。使用链表存储。每个顶点拥有自己的链表,链表存储该顶点 的邻接点。如果是有向图,链表节点个数表示该顶点的出度。
3、逆邻接表。使用链表存储。通常针对有向图,与邻接表相反,链表节点个数表示该顶点的入度。
4、十字链表,邻接表与逆邻接表的结合。适用于有向图/稀疏矩阵,方便求顶点的出度和入度。有点节点、边节点,结构体定义如下:

struct VNode
{
    int i; // 点索引
    VNode *olink, *ilink; // 出度边,入度边指针
}

struct ENode
{
   int i, j; // 边的起点终点
   ENode *right, *down; // 同一行,同一列指针
   int weight; // 权重
   int index; // 边索引号
}

5、邻接多重表。适用于无向图,需要删除边的情况。可以用来求点的度。类比:十字链表是有向图的邻接多重表。邻接多重表不唯一。点节点、边节点结构体定义:

struct VNode
{
    int i; // 点索引
    VNode *link; // 指向第一条边
}

struct ENode
{
    int i, j; // 点索引
    ENode *ivex, *jvex; // i,j点分别邻接的其它边
    int weight; // 权
    int index; // 边索引
}

6、边集数组。通常适用于边的条数小于点的个数时使用。使用两个数组,数组1存储点,int a[3] = {0, 1, 2}; 数组2存储边结构,结构体定义:

struct ENode
{
    int index; // 边索引
    int start, end; // 起点终点
    int weight;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值