【数据结构十一】图的存储结构以及基本操作

90 阅读2分钟

图的存储

  • 邻接矩阵:数组实现的顺序存储,空间复杂度高,不适合存储稀疏图

图片.png

图片.png

图片.png

图片.png

图片.png

  • 邻接表:顺序+链式存储

图片.png

图片.png

tip: 图的邻接表表示方式并不唯一。但只要确定了顶点编号,图的邻接矩阵表示方式唯一

图片.png

  • 十字链表:只能用于存储有向图

图片.png

==> 空间复杂度:O(|V|+|E|)

  1. 顺着绿色线路找:指定顶点的所有出边

  2. 顺着橙色线路找:指定顶点的所有入边

—————————————————————————————————

对于邻接矩阵、邻接表存储无向图时,存在以下问题:

  1. 邻接矩阵的空间复杂度高
  2. 每条边对应两份冗余信息,删除顶点、删除边等操作时间复杂度高
  • 邻接多重表:用于存储无向图

图片.png

  • 总结:

图片.png

图的基本操作

  • (1) 判断图G是否存在边<x,y>或(x,y)
    • 在邻接矩阵里,时间复杂度为O(1) ⭐
    • 在邻接表里,时间复杂度为O(1)~O(|V|)
  • (2) 列出图G中与结点x邻接的边
    • 在邻接矩阵里,时间复杂度为O(|V|)
    • 在邻接表里,对于无向图:时间复杂度为O(1)~O(|V|) ⭐
    • 在邻接表里,对于有向图:出边:O(1)~O(|V|), 出边O(|E|)
  • (3) 在图G中插入顶点x
    • 在邻接矩阵里,时间复杂度为O(1)
    • 在邻接表里,时间复杂度为O(1)
  • (4) 在图G中删除顶点x
    • 对于无向图:
    • 图片.png
    • 对于有向图:
    • 图片.png
  • (5) 若无向边(x,y)或有向边<x,y>不存在,则向图G中添加该边
    • 在邻接矩阵里,时间复杂度为O(1)
    • 在邻接表里,时间复杂度为O(1)~O(|V|)
  • (6) 求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1

图片.png

图片.png

  • (7) 假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的下-个邻接点的顶点号,若y是x的最后个邻接点,则返回-1。

图片.png

  • (8)

图片.png