6.3 数据结构——图的存储结构之邻接表

6.3.1 无向图的邻接表

 

顶点:按编号顺序将顶点数据存储在一维数组中。

关联同一顶点的边(以顶点为尾的弧)用线性表存储。

无向图的邻接表的特点:邻接表不唯一;若无向图有n个顶点、e条边,则题邻接表需要n个头结点和2e个表结点,它适用于存储稀疏图;无向图中顶点vi的度为第i个单链表中的结点数。

6.3.2 有向图的邻接表

有向图的邻接表找出度容易,找入度难。

特点:

1、顶点vi的出度为第i个单链表中的结点个数;

2、顶点vi的入度为整个单链表中邻接点域值是i-1的结点个数。

逆邻接表:

1、顶点vi的入度为第i个单链表中的结点个数;

2、顶点vi的出度为整个单链表中邻接点域值是i-1的结点个数。

6.3.3 图的邻接表存储表示

弧(边)的结点结构:

#define MVNum 100   //最大顶点数

typedef struct ArcNode
{
    int adjvex;   //边所指向的顶点在数组中的位置
    struct ArcNode *nextarc;  //指向下一条边的指针
    OtherInfo info;   //和边相关的信息
}ArcNode;

邻接表的结构:

typedef struct VNode
{
    VerTexType data;    //顶点信息
    ArcNode *firstarc;  //指向第一条边依附该顶点的边的指针
}VNode, AdjList[NVNum];

图的结构定义:

typedef struct
{
    AdjList vertices;
    int vexnum, arcnum; //图的顶点个数和边的个数
}ALGraph;

6.3.4 邻接表的特点

1、方便找任一顶点的所有“邻接点”;

2、节约稀疏图的空间;

3、不方便检查任一对顶点间是否存在边。

6.3.5 邻接矩阵与邻接表表示法的关系

1、联系:

        邻接表中每个链表对应邻接距阵的一行,链表中点解个数等于邻接矩阵一行中非零元素的个数。

2、区别:

(1)对于任一确定的无向图,邻接距阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。

(2)邻接距阵的空间复杂度为O\left ( n^{2} \right ),而邻接表的空间复杂度为O\left ( n+e \right )

3、用途:

        邻接距阵多用于稠密图;而邻接表多用于稀疏图。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值