1、为什么要有图
1)前面我们学习了线性表和树
2)线性表局限于一个直接前驱和一个直接后继的关系
3)树也只能有一个直接前驱就是父节点
4)当我们需要表示多对多的关系时,这里我们就用到了图
图是一种数据结构,其中节点可以具有零个或多个相邻元素。两个节点之间的链接称为边。节点也可以称为顶点。如图:
2、图的常用概念
1)顶点(vertex)
2)边(edge)
3)路径——比如从D->C的路径有 (1)D->B->C (2)D->A->B->C
4)无向图——顶点之间的链接没有方向,比如A-B,即可以A->B,也可以B->A
5)有向图
6)带权图
3、图的表示方式
图的表示方式有两种:二维数组表示(邻接矩阵),链表表示(邻接表)
3.1 邻接矩阵
邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵是row和col表示的是1…n个点
3.2 邻接表
邻接矩阵需要为每一个顶点都分配n个边的空间,其实有很多边都是不存在的,会造成空间的一定损失。
邻接表的实现只关心存在的边,不关系不存在的边。因此没有空间浪费,邻接表由数组+链表组成。