1. 图是一种非线性结构
2. 图的特点:
顶点之间的关系是任意的
图中任意两个顶点之间都可能相关
顶点的前驱和后继个数无限制
3. 定义: 图是一种:数据元素间存在多对多关系的数据结构,加上一组基本操作构成的抽象数据类型。
4. 基本术语:
顶点:图中的数据元素。
弧:若 <v, w>∈VR,则 <v, w> 表示从 v 到 w 的一条弧,且称 v 为弧尾,称 w 为弧头,此时的图称为有向图。
G1 = (V1, A1) V1 = {v1, v2, v3, v4} A1 = {< v1, v2>, < v1, v3>, < v3, v4>, < v4, v1>}
边:若 <v, w>∈VR 必有<w, v>∈VR,则以无序对 (v, w) 代表这两个有序对,表示 v 和 w 之间的一条边,此时的图称为无向图。
G2 = (V2, E2) V2 = {v1, v2, v3, v4, v5}
E2 = {(v1, v2), (v1, v4), (v2, v3), (v2, v5) , (v3, v4), (v3, v5)}
1. 无向图中边的取值范围:0≤e≤n(n-1)/2。
2. 完全图:有 n(n-1)/2 条边的无向图(即:每两个顶点之间都存在着一条边) 称为完全图。
3. 有向图中弧的取值范围:0≤e≤n(n-1)。
4. 有向完全图:有 n (n - 1) 条弧的有向图(即:每两个顶点之间都存在着方向相反的 两条弧)称为有向完全图。
完全有向图
完全无向图
1. 稀疏图:含有很少条边或弧的图。
2. 稠密图:含有很多条边或弧的接近完全图的图。
3. 权:与图的边或弧相关的数,这些数可以表示从一个顶点到另一个顶点的距离或耗费。
4. 网: 带权的图。
5. 度:无向图中顶点 v 的度是和 v 相关联的边的数目,记为:TD(v)。
6. 入度:有向图中以顶点 v 为头的弧的数目称为 v 的入度记为:ID(v)。
7. 出度:有向图中以顶点 v 为尾的弧的数目称为 v 的出度记为:OD(v)。
8. 度:入度和出度之和,即:TD(v) = ID(v) + OD(v)
9. 路径:从顶点 v 到 v´ 的路径是一个顶点序列
10. 路径长度:路径上边或弧的数目
- 回路(环):第一个顶点和最后一个顶点相同的路径
12. 连通图:图中任意两个顶点都是连通的
13. 非连通图:有 n 个顶点和小于 n-1 条边的图。
14. 强连通图: 任意两个顶点都连通的有向图。
15. 生成树:所有顶点均由边连接在一起但不存在回路的图
图的存储结构
1.多重链表
数组表示法(邻接矩阵表示法)
特点:
无向图的邻接矩阵对称,可压缩存储;有 n 个顶点的无向图所需存储空间为 n(n-1)/2。
有向图的邻接矩阵不一定对称;有 n 个顶点的有向图所需存储空间为 n²,用于稀疏图时空间浪费严重。
无向图中顶点 vi 的度 TD(vi) 是邻接矩阵中第 i 行 1 的个数。
网的邻接矩阵可定义为:
邻接表(类似于树的孩子链表表示法)
特点:
若无向图中有 n 个顶点、e 条边,则其邻接表需 n 个头结点和 2e 个表结 点。适宜存储稀疏图。
无向图中顶点 vi 的度为第 i 个单链表中的结点数。
顶点 vi 的出度为第 i 个 顶点 vi 的入度为第 i 个
单链表中的结点个数。(入度为i-1) 单链表中的结点个数。(出度为i-1)
有向图的十字链表
Tailvex:弧尾位置
Headvex:弧头位置
Hlink:弧头相同的下一条弧
Tlink:弧尾相同的下一条弧
邻接多重表(无向图的另一种链式存储结构)
邻接表优点:容易求得顶点和边的信息。
缺点:某些操作不方便(如:删除一条边需找表示此边的两个结点)。
邻接多重表:每条边用一个结点表示。其结点结构如下: