408-数据结构-图特点以及存储结构

连通图:任意两点都连通。
强连通图:任何一对顶点可以互通。

图背下来考点:
对于无向图:

  1. 如果是连通图,至少有n-1条边,如果边数超过n-1必有回路,如果是非连通图最多有C(n-1,2)条边
  2. 所有点度数之和为2E
  3. 完全图有C(n,2)边

有向图:

  1. 对于有向图,如果是强连通,至少需要n条边,构成回路
  2. 所有顶点入度之和=所有顶点出度之和=边数
  3. 完全图有2C(n,2)边

存储结构

邻接矩阵

m(i)(j) = 1表示点i与点j存在一条边,无向图即存在一条边,有向图存在i到j的边。0就不存在。
求入度,遍历行,求出度遍历列,复杂度都O(|v|)。
求领接点,遍历行,遍历列,复杂度同上。
优点:简单,有向无向都能用。缺点:存稠密图还行,存稀疏图空间浪费太大。

邻接表

类似树的孩子表示法。结点用顺序存储,一个顺序存储块有一个链表,里面存放与这个点连接的边。
求出度,遍历链表就好,遍历入度,需要遍历整个存储结构。
对于无向图友好,对于有向图不友好(在进行求入度时候)。
在进行删除也不友好,也需要遍历整个存储结构。

十字链表法

只用于有向图
与优化矩阵是有的十字链表相同。
用于存储有向图,每一个点包含自身数据集与两个指向边结点指针,一个指向自己结点指向其余结点的边,一个指向别的直接指向自己的边,也就是矩阵的行与列。
每一个边结点数据块内存放由哪一个结点指向哪一个结点,以及边数据。包含两个边结点指针,一个行指针,一个列指针。
优化了邻接矩阵空间浪费的问题,同时求入度与出度都只需要遍历行链表或列链表就可以了。

邻接多重链表

只用于无向图
每一个顶点结点包含数据块与一个边结点指针,指向一个与自己有关的边。
每一个边结点包含数据区域:哪一个顶点指向哪一个顶点,边数据,两个边结点指针,两个指针指向与不同顶点相关的边。
单纯从存储结构来看,十字链表的边结点与这个完全一致。但二者指针指向东西不同。邻接多重链表需要指向下一个边与顶点相关,与边从哪个顶点指到那个顶点无关。但是十字链表与位置有关。
邻接多重优化了邻接表重复存储问题与删除操作的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值