数据结构图(1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0
1
3
1
3
2
2
12、生成树:一个连通图的最小连通子图,它含有图中全部n个顶 点,但只有n-1条边。 13、结点的度:结点v的度是与它相关联的边的条数。记作TD(v)。 在有向图中, 结点的度等于该结点的入度与出度之和。其中结点 v 的入度是以 v 为终点的有向边的条数, 记作 ID(v);结点 v 的 出度是以 v 为始点的有向边的条数, 记作 OD(v)。 v1 v3 v2 v4 v1 v3 v4 v5 v2
data B 0 1 A D 2 3 C (a) E 4 A B C D E sorce 0 1 2 3 4 (b)
∧ ∧
adj
dest next 4 3 2 1 ∧
4 ∧ 1 ∧
2、邻接表存储法的特点:—它其实是对邻接矩阵法的一种改进 分析1: 对于n个顶点e条边的无向图,邻接表中除了n个头结点 外,只有2e个表结点,空间效率为O(n+2e)。 若是稀疏图(e<<n2),则比邻接矩阵表示法O(n2)省空间。 怎样计算无向图顶点的度? TD(Vi)=单链表中链接的结点个数 分析2:在有向图中,邻接表中除了n个头结点外,只有e个表结点, 空间效率为O(n+e)。若是稀疏图,则比邻接矩阵表示法合适。 邻接表的优点: 空间效率高;容易寻找顶点的邻接点; 邻接表的缺点: 有向图中计算顶点的度不方便。
5
6
1 2 3 V 4 5 6
0 20 30 20 0 40 30 0 50 A 40 50 0 70 80 70 0 80 0
A=
0 0 1 0 0 0 1 0 0 0 0 1
a b c g
f e d
1 6 1 2 3 0 2 6
0 1 2 3 4 5 6
a b c d e f g
0 1 2 3 4 5 6
^
^ ^
5
^
^
4 3
^
5
^
1
4
2
3
5.带权有向图G用邻接矩阵A存储,则vi的入度等于A中 ∞且非0的元素个数 第i列 非
6.无向图的邻接矩阵是一个 对称 矩阵。
7.有n个结点的无向图最多有 n(n-1)/2条边。
8.有n个顶点的强连通有向图G至少有
1 2
n
条边。
9.在有n个顶点的有向图中,每个顶点的度最大可达
2(n-1)
。
10.一个图的 邻接矩阵 表示法是唯一的,而 邻接表 表示法是不 唯一的。 11.对于一个具有n个顶点和e条边的无向图,若采用邻接表表示, n ,所有邻接表中的结点总数 则表头数组元素的个数为 2e 。 是
(4)删除边deleteEdge(v1, v2): (5)删除结点deleteVertex(vertex): (6)第一个邻接结点getFirstVex(v): (7)下一个邻接结点getNextVex(v1, v2): (8)遍历depthFirstSearch(vs):
7.2
图的存储结构
图的存储结构主要有邻接矩阵和邻接表两种。 7.2.1 图的邻接矩阵存储结构
第七章 图
• 7.1 概述 • 7.2 图的存储结构 • 7.3 邻接矩阵图类 • 7.4 图的遍历
7.1 概述
7.1.1 图的基本概念 1、图:由结点集合及结点间的关系集合组成的一种数据结构。 记为G=( V, E ),其中:V是G的顶点集合;E是G的边集合。 2、有向图:图G中的每条边都是有方向的;<v1,v3> 3、无向图:图G中的每条边都是无方向的;(v1,v4) <v1,v4><v4,v1> 4、完全图:图G任意两个顶点都有一条边相连接; 若 n 个顶点的无向图有 n(n-1)/2 条边, 称为无向完全图 若 n 个顶点的有向图有n(n-1) 条边, 称为有向完全图 v1 v3 v2 v4 v1 v3 v2 1 1 3 4
2 10 1 15 4 6 3 12 7 6 3 7 8 A 30 D 75 45 E 80 7 5 9 60 B 40 C 35
6
16 (a)
(b)
8、简单路径:路径上各顶点 v1,v2,...,vm 均不互相重复。 9、回路:若路径上第一个顶点 v1 与最后一个顶点vm 重合,则 称这样的路径为回路或环。
10、连通图:在无向图中, 若从顶点v1到顶点v2有路径, 则称顶 点v1与v2是连通的。如果图中任意一对顶点都是连通的, 则称此 图是连通图。 11、强连通图:在有向图中, 若对于每一对顶点vi和vj, 都存在 一条从vi到vj和从vj到vi的路径, 则称此图是强连通图。
0
0
1
1
3 2 3
2
0
假设图G=(V,E)有n个结点,即V={v0,v1,…,vn-1},E可 用如下形式的矩阵A描述,对于A中的每一个元素aij,满足:
若 ( v i , v j ) E 或 v i , v j E 1 a ij 否则 0 由于矩阵A中的元素aij表示了结点vi和结点vj之间边的关
12.对于n个顶点的无向图,采用邻接矩阵表示,求图中边数的 方法是 邻接矩阵中1的个数除以2 ,判断任意两个顶点i和j是否 A[i][j]是否为1 有边相连的方法是 ,求任意一个顶 计算该行中1的个数 点的度的方法是 。
13.对于n个顶点的有向图,采用邻接矩阵表示,求图中边数的 方法是 邻接矩阵中1的个数 ,判断任意两个顶点i和j是否 A[i][j]是否为1 有边相连的方法是 ,求任意一个顶 点vi的度的方法是 第i行中1的个数与第i列中1的个数之和 。
邻接矩阵法优点: 容易实现图的操作,如:求某顶点的度、判断顶 点之间是否有边(弧)、找顶点的邻接点等等。 邻接矩阵法缺点: n个顶点需要n*n个单元存储边(弧);空间效率为 O(n2)。 对稀疏图而言尤其浪费空间。
7.2.2 图的邻接表存储结构 1、图的邻接表 它是一种顺序存储与链式存储相结合的存储方法,顺序存 储部分用来保存图中顶点的信息,链式存储部分用来保存图中 边(或弧)的信息
3. 用途:
邻接矩阵多用于稠密图的存储; 而邻接表多用于稀疏图的存储(e<<n2)。
1.在一个无向图中,所有顶点的度之和等于边数的 2.具有6个顶点的无向图至少应有 5 通图。
2
倍。
条边才能确保是一个连
3.在一个具有n个顶点的无向图中,要连通全部顶点至少需要边 n-1 条。 4.对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该 n2 矩阵大小是 。
例3 : 带权图(即网络)的邻接矩阵如何表示?
以有向网为例:
v1 A 3 v6 1 v5 7 6
5 8 9 v4 5
v2
顶点表: ( v1 v2 v3 v4 v5 v6 ) v1 0 5∞ 7 ∞ 4 邻接矩阵: 0 5∞ ∞ ∞7∞∞ ∞ v2 ∞ ∞∞ ∞ ∞ v3 A = ∞ 00 4 4∞ ∞ ∞ v3 ∞∞ 0 ∞∞ ∞ 9 88 0 ∞ 9 5 v4 ∞∞ 5 0 ∞ ∞ ∞ ∞5 0 ∞ ∞6 6 v5 ∞∞ ∞ 0 ∞ ∞ ∞ ∞ ∞55 0 ∞ v6 ∞ ∞ ∞ ∞∞ 1 0 0 3 3 ∞ ∞ 1
2 10 1 15 4 6 3 12 7 6 3 7 8 A 30 D 75 45 E 80 7 5 9 60 B 40 C 35
6
16 (a)
(b)
7、路径:在图G=(V, E)中,若从顶点 vi 出发,沿一些边经过 顶点vp1,vp2,…,vpm,到达顶点vj。则称顶点序列(vi,vp1,vp2,…, vpm ,vj ) 为从顶点vi 到顶点 vj 的路径。 路径长度:非带权图的路径长度是指此路径上边的条数; 带权图的路径长度是指路径上各边的权之和。
•
• • •
数据集合:由一组结点集合{vi}和一组边{ej}集合组成。
当为带权图时每条边上权wj还构成权集合{wj}。 操作集合: (1)初始化initiate(n): (2)插入结点 insertVertex(vertex):
•
• • • • •
(3)插入边insertEdge(v1, v2, weight):
(b)
(a)
例1、无向图的邻接矩阵如何表示? v1
v2
v3
顶点表: V= ( v1 v2 v3 v4 v5 )
邻接矩阵: A=
0 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 1 1 0 1 0 0 v1 v2 v3 v4 v5
0 0 0 0 0 0 0 1 0 1 0 0 0 0
v2 v3 v4
分析1:有向图的邻接矩阵可能是不对称的。 分析2:顶点vi的出度=第i行为1的元素之和。
顶点vi的入度=第i列为1的元素之和。 顶点的度=第i行为1元素之和+第i列为1元素之和, 即:TD( vi ) = OD( vi ) + ID( vi )
2
v5
v4
(a)有向图
(b)无向图
4 (c)无向完全图
3 2 (d)有向完全图
5、子图:设有两个图 G1=(V1, E1) 和 G2=(V2, E2)。若 V2 V1 且 E2 E1, 则称 图G2 是 图G1 的子图。
(a)图1 (b)图2 6、带权图:指边上带权的图。其中权是指每条边标上具有与 该边相关的数据信息。
对于右图所示的有向图,给出: (1)该有向图的邻接矩阵存储 结构; (2)该有向图的邻接表存储结 构。 V=[ a b c d e f
0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 1
a b g
f e
c
d
g]
1 1 0 0 0 0 0
•
14.邻接结点 在无向图G中,若(u,v)是 E(G)中的一条边,则称u和v互为邻接结点, 并称边(u,v)依附于结点u和v。在有向图G 中,若<u,v>是E(G)中的一条边,则称结点 u邻接到结点v,结点v邻接自结点u,并称边 <u,v>和结点u和结点v相关联。
(0,1) <0,1>
• 7.1.2 图的抽象数据类型
系,或者说,A中的元素aij表示了结点vi和结点vj的邻接关 系,所以矩阵A称作邻接矩阵。
带权图的邻接矩阵
设带权图具有 n 个结点,则用 n 行 n 列的矩阵 A 表示该图。
源自文库
aij=
Wij 若(vi,vj) ∈E或< vi,vj > ∈E ∞ 0 否则且i=j 否则且i=j
2 20 1 30 3 50 40 4 80 70
3、讨论:邻接表与邻接矩阵有什么异同之处?
1. 联系:邻接表中每个链表对应于邻接矩阵中的一行,
链表中结点个数等于一行中非零元素的个数。
2. 区别:
① 对于任一确定的图,邻接矩阵是唯一的(行列号与 顶点编号一致),但邻接表不唯一(链接次序与顶 点编号无关)。 ② 邻接矩阵的空间复杂度为O(n2),而邻接表的空间复 杂度为O(n+e)。
A
v4
v5
分析1:无向图的邻接矩阵是对称的; 分析2:顶点i 的度=第 i 行 (列) 中1 的个数; 特别:完全图的邻接矩阵中,对角元素为0,其余全1。
例2 :有向图的邻接矩阵如何表示?
v1 v2 v4 顶点表: ( v1 v2 v3 v4 ) v1 邻接矩阵: 0 1 0 0 0 1
A
v3
A=