图是一种非线性结构,由顶点和边构成,我们可以将图抽象的表示为一组顶点和边的集合
我们将顶点看作节点,将边看作各个节点的引用(指针),我们就可以将图看作是一种从链表拓展过来的 数据结构
常用术语:
一般有“邻接矩阵”和“邻接表”表示
设图的顶点数量为 n,「邻接矩阵 adjacency matrix」使用一个 n×n 大小的矩阵来表示图,每一行(列)代表一个顶点,矩阵元素代表边,用 1 或 0 表示两个顶点之间是否存在边
特性
- 顶点不能与自身相连,因此邻接矩阵主对角线元素没有意义
- 对于无向图,两个方向的边等价,此时邻接矩阵关于主对角线对称
- 将邻接矩阵的元素从 1 和 0 替换为权重,则可表示有权图
- 使用邻接矩阵表示图时,我们可以直接访问矩阵元素以获取边,因此增删查改操作的效率很高,时间复杂度均为 O(1) 。然而,矩阵的空间复杂度为 O(n2) ,内存占用较多。
使用 n 个链表来表示图,链表节点表示顶点。第 n 个链表对应顶点 n ,其中存储了该顶点的所有邻接顶点
邻接表仅存储实际存在的边,而边的总数通常远小于 n2 ,因此它更加节省空间。然而,在邻接表中需要通过遍历链表来查找边,因此其时间效率不如邻接矩阵