大话数据结构 -07-1 图的定义、抽象数据类型与存储结构
1. 定义
在图结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。
2. 与线性表、树结构的区别
3. 相关定义
(1)无向、有向
与图边或者弧相关的数字叫做权(Weight),带权的图通常称为网(Network)
(2) 图的顶点与边间的关系
无向图:
边数等于各顶点度数和的一半(因为重复两次计数)
有向图:
注意:
【1】图中顶点与顶点之间的路径并不是唯一的
【2】
【3】
(3)连通图相关术语
【1】无向连通图
【2】连通分量
注意这里极大的含义,是指能连通的最大结点。非连通图也可能含有连通分量!!
此:图1有两个连通分量(图2与图3),图3满足极大顶点数(没有顶点能再与其连接),图4不满足极大定点数(还有D能与其相连)
【3】有向图(每一对顶点)
怎么理解??
【4】连通图的生成树
但是n-1条边并不一定是生成树
4. 图的抽象数据类型
5. 图的存储结构(共有五种不同的存储结构)
(1)邻接矩阵
【1】无向图
注意:矩阵主对角线的值全为0,因为不存在顶点到自身的 边
无向图的边数组是一个对称矩阵(以从左上角到右下角的主对角线为轴)
规律:
【2】有向图
【3】网
代码实现
创建网
缺点:对于边数相对于顶点较少的图,该结构存在对存储空间的极大浪费
(2)邻接表
【1】无向图
【2】有向图
容易得到每个顶点的出度。
有时为了确定顶点的入度或以顶点为弧头的弧,可以建立一个有向图的逆邻接表。
【3】带权重的网图
【4】实现代码:
结点定义代码
无向图邻接表创建
代码中使用了头插法
对于无向图:
缺点:
(3)十字链表(适用于有向图)
(4)邻接多重表(无向图)
具体实现:
邻接多重表与邻接表的差别,仅仅是在于同一条边在邻接表中用两个结点表示,而在邻接多重表中只有一个结点。
(5)边集数组