图的存储
- 邻接矩阵:数组实现的顺序存储,空间复杂度高,不适合存储稀疏图
- 邻接表:顺序+链式存储
tip: 图的邻接表表示方式并不唯一。但只要确定了顶点编号,图的邻接矩阵表示方式唯一
- 十字链表:只能用于存储有向图
==> 空间复杂度:O(|V|+|E|)
-
顺着绿色线路找:指定顶点的所有出边
-
顺着橙色线路找:指定顶点的所有入边
—————————————————————————————————
对于邻接矩阵、邻接表存储无向图时,存在以下问题:
- 邻接矩阵的空间复杂度高
- 每条边对应两份冗余信息,删除顶点、删除边等操作时间复杂度高
- 邻接多重表:用于存储无向图
- 总结:
图的基本操作
- (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
- 对于无向图:
- 对于有向图:
- (5) 若无向边(x,y)或有向边<x,y>不存在,则向图G中添加该边
- 在邻接矩阵里,时间复杂度为O(1)
- 在邻接表里,时间复杂度为O(1)~O(|V|)
- (6) 求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1
- (7) 假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的下-个邻接点的顶点号,若y是x的最后个邻接点,则返回-1。
- (8)