图
相比于树,图的结构关系相对复杂,没有明显父子关系一说,也就是各个节点之间都可能存在关系,实际使用例如人际关系等,如下图所示(本章节图均来源于百度图片)
储存方式
图的储存方式一般表示方式:邻接矩阵、邻接表、边集数组
注意:后面涉及到图的一些算法,不少都会使用到邻接矩阵或者邻接表,所以对其结构了解也是很重要的
邻接矩阵
平时使用的比较多。
邻接矩阵是一个二维数组方式,坐标表示着节点,坐标对应的值节点之间的关系,如下图所示(图来源于百度图片),
同一个节点之间不会有链接,一般默认距离为0(也可能认为无穷大),如果不存在连接,则默认显示为无穷大
沿着左上角到右下角为对角线,对称位置则为不同方向
邻接表
邻接表是一个一维数组表示固定顶点,每个顶点后面用链表将其与其他有连接的顶点连接起来,如下图所示(图来源于百度图片)
边集数组
用于保存边的集合,一般用来保存关系相对简单的图,例如最小生成树的结果等,其内部元素数据结构如下
typedef struct {
int fromvex;
int tovex;
int weight;
};