【数据结构算法】图(三):存储结构(邻接表,十字链表,邻接多重表,边集矩阵)
由于邻接矩阵这种存储结构存在一定空间浪费,因此考虑用邻接表
邻接表
这是一种数组与链表结合一起来存储。
无向图
有向图(把顶点当弧尾)
有向图(把顶点当弧头)【这种叫做逆邻接表】
十字链表
邻接表固然优秀,但也有不足的地方,比如对有向图的处理的时候,有时需要建立逆邻接表。
十字链表将邻接表和逆邻接表整合在一起。
十字链表虽然结构复杂,但其创建图的时间复杂度和邻接表是相同的。
邻接多重表
邻接表固然优秀,但也有不足的地方,比如对无向图的处理的时候,重点关注的顶点,但要是重点关注边的时候,比如对已经访问过的边做标记或者删除某一条边的时候(这种时候要做好几步操作,因为某条边可能会在很多线性表中出现,如下图),就不是那么方便了。就要考虑邻接多重表。
邻接多重表的特点: