数据结构图结构动态.pptx
《数据结构图结构动态.pptx》由会员分享,可在线阅读,更多相关《数据结构图结构动态.pptx(141页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 图(Graph)是一种较线性表和树更为复杂的)是一种较线性表和树更为复杂的非线性结构非线性结构。在在线性结构线性结构中,结点之间的关系是中,结点之间的关系是线性关系线性关系,除开始结点,除开始结点和终端结点外,每个结点只有一个直接前趋和直接后继。和终端结点外,每个结点只有一个直接前趋和直接后继。在在树形结构树形结构中,结点之间的关系实质上是中,结点之间的关系实质上是层次关系层次关系,同层,同层上的每个结点可以和下一层的零个或多个结点(即孩子)上的每个结点可以和下一层的零个或多个结点(即孩子)相关,但只能和上一层的一个结点(即双亲)相关(根结相关,但只能和上一层的一个结点(即双亲)相关(根结
2、点除外)。点除外)。然而在然而在图形结构图形结构中,对结点(图中常称为顶点)的前趋和中,对结点(图中常称为顶点)的前趋和后继个数都是不加限制的,即后继个数都是不加限制的,即结点之间的关系是任意的结点之间的关系是任意的。图中任意两个结点之间都可能相关。图中任意两个结点之间都可能相关。图的图的应用应用极为广泛,特别是近年来的迅速发展,已渗透到极为广泛,特别是近年来的迅速发展,已渗透到诸如诸如语言学、逻辑学、物理、化学、电讯工程、计算机科语言学、逻辑学、物理、化学、电讯工程、计算机科学以及数学的其它分支中。学以及数学的其它分支中。第1页/共141页2 7.1 图的定义 7.2 图的存储结构 7.3
3、图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用 7.6 最短路径 第七章 图第2页/共141页3v 图定义 图G由两个集合V和E组成,记为 G=(V,E)其中,V是顶点的有穷非空集合,E是V中顶点偶对的有穷集,这些顶点偶对称为边。通常V(G)和E(G)分别称为图的顶点集合和边集合。注:E(G)可以为空集。7.1 图的定义和术语第3页/共141页47.1 7.1 图的定义和术语v 图的数据结构的形式化定义 (p156)G=(V,E)其中 V=x|x dataobject E=VR VR=|p(x,y)(x,y V)VR是两顶点间的关系的集合,即边的集合。第4页/共141页5图的图的
4、术语术语 有向图有向图有向图有向图:对一个图对一个图GG,若边集,若边集E(G)E(G)为有向边的集合,则称该图为有向图。为有向边的集合,则称该图为有向图。G1G1=(V,E)V=v1,v2,v3,v4E=,其中表示从x到y的一条弧(arc),A为弧集合,x为弧尾(tail),y为弧头(head)x弧尾y弧头第5页/共141页6图的图的术语术语 无向图无向图无向图无向图:对一个图对一个图GG,若边集,若边集E(G)E(G)为无向边的集合,则称该图为无向图。为无向边的集合,则称该图为无向图。G2 G2=(V,E)V=v1,v2,v3,v4,v5E=(v1,v2),(v1,v3),(v2,v3),
5、(v3,v4),(v2,v5),(v3,v5)其中,(x,y)表示x与y之间的一条连线,称为边(edge)第6页/共141页7图的术语设n为顶点数,e为边或弧的条数 对无向图有:0 e n(n-1)/2 有向图有:0 e n(n-1)证明:对有向图,每个顶点至多有n-1条边与其它的n-1个顶点相连,则n个顶点至多有n(n-1)条边。但对无向图,每条边连接2个顶点,故最多为n(n-1)/2 第7页/共141页8图的图的术术语语端点和邻接点端点和邻接点 在一个无向图中,若存在一条边在一个无向图中,若存在一条边v,则称则称v vi i,v vj j为该边的两个为该边的两个端点端点,并称它们互为并称它
6、们互为邻结点邻结点。21453G2第8页/共141页9图的图的术语术语 起点和终点起点和终点起点和终点起点和终点 在一个有向图中,若存在一条边在一个有向图中,若存在一条边,则称该则称该边是顶点边是顶点v vi i的一条的一条出边出边,是,是v vj j的一条的一条入边入边,称,称v vi i是起始端点(或是起始端点(或起点起点),称),称v vj j是终止端点(或是终止端点(或终点终点),并称它们并称它们互为邻结点互为邻结点.2134G1第9页/共141页10图的图的术术语语 度度度度 图中每个顶点的度是以该顶点为一端点的边的数目。图中每个顶点的度是以该顶点为一端点的边的数目。记为记为 D(V
7、)。入度和出度入度和出度入度和出度入度和出度 对于有向图,入度为以该顶点为终点的边的数对于有向图,入度为以该顶点为终点的边的数目,出度为以该顶点为起点的边的数目。目,出度为以该顶点为起点的边的数目。例 D(v1)=3 无向图的度数为依附于顶点v的边数;有向图的度数等于以顶点v 为弧头的弧数与以顶点v为弧尾的弧数之和21453G22134G1例 D(v1)=2 第10页/共141页11图的图的术术语语子图子图 设有两个图设有两个图G=(V,E)G=(V,E)中,若中,若V是是V的子集,的子集,E是是E的子集,的子集,则称则称G是是G子图。子图。G2 第11页/共141页12图的图的术术语语 简单
8、图简单图简单图简单图 对不含多重边和自环的图。对不含多重边和自环的图。2145321453简单图非简单图第12页/共141页13图的术语完全图 边达到最大的图 无向完全图:无向完全图:具有具有n(n-1)/2n(n-1)/2条边的简单图条边的简单图称为无向完全图称为无向完全图 有向完全图:有向完全图:具有具有n(n-1)n(n-1)条边的有向图。条边的有向图。稀疏图:稀疏图:边或弧很少的图。边或弧很少的图。稠密图:稠密图:边或弧很多的图。边或弧很多的图。权:权:与图的边或弧相关的数。与图的边或弧相关的数。网:网:边或弧上带有权值的图。边或弧上带有权值的图。第13页/共141页14图的术语路径
9、非空有限点、弧交替序列,W=v0,a1,v1,ak,vk 使得i=1,2,k,弧ai的头vi,尾为vi-1 。路径长度:路径上边或弧的数目第14页/共141页15图的术语简单路径:除首尾两点外,其他各点都不相同的路径称为简单路径。简单路径第15页/共141页16图的术语回路:无重复边的闭路径。环:闭的简单路径,称为环。回路但不是环环第16页/共141页17图的术语连通图:任何两点都有路径的图。无向图:若图中任意两个顶点vi,vj都是连通 的,则称该图是连通图(vivj)有向图:若图中任意两个顶点vi,vj,都存在 从vi到vj 和从 vj到vi的路径,则称 该有向图为强连通图 (vivj)第1
10、7页/共141页18图的术语连通分量:无向图:无向图中极大连通子图,称为 连通分量 有向图:有向图中极大强连通子图,称为 强连通分量第18页/共141页19生成树图的术语生成树 一个连通图的生成树是一个极小连通子图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边。有向树 如果一个有向图恰有一个顶点入度为0,其余顶点的入度均为1,则是一棵有向树。第19页/共141页20生成树、生成森林生成树 一个连通图的生成树是它的极小连通子图,在n个顶点的情形下,有n-1条边。生成树是对连通图而言的 是连通图的极小连通子图 包含图中的所有顶点 有且仅有n-1n-1条边 非连通图的生成树则组成一个生成森林
11、。若图中有n个顶点,m个连通分量,则生成森林中有n-m条边。一个有向图的生成森林由若干棵有向树组成,含有图中全部顶点,但只有足以构成若干棵不相交的有向树的弧。第20页/共141页21图有两种存储结构 邻接矩阵 邻接表7.2 7.2 图的存储结构第21页/共141页227.2.1 7.2.1 邻接矩阵邻接矩阵 邻接矩阵(Adjacency Matrix)是表示顶点之间相邻关系的矩阵。设G(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵。7.2 图的存储结构 无向图的邻接矩阵是以主对角线对称的,有向图的邻接矩阵可能是不对称的。在有向图中:在有向图中:第第 i 行行 1 的个数就
12、是顶点的个数就是顶点 i 的出度,的出度,第第 j 列列 1 的个数就是顶点的个数就是顶点 j 的入度。的入度。在无向图中在无向图中,第第 i 行行(列列)1 的个数就是顶点的个数就是顶点i 的度。的度。第22页/共141页23一、邻接矩阵(用二维数组表示)例如:G1的邻接矩阵例如:G2的邻接矩阵无向图的邻接矩阵为对称矩阵G212345G11234第23页/共141页24 对于无向图,(vi,vj)和(vj,vi)表示同一条边,因此,在邻接矩阵中Aij=Aji。无向图的邻接矩阵是(关于主对角线)对称矩阵,可用主对角线以上(或以下)的部分表示。对有向图,弧和表示方向不同的两条弧,Aij和Aji表
13、示不同的弧,所以有向图的邻接矩阵一般不具有对称性。邻接矩阵表示法适合于以顶点为主的运算。第24页/共141页25 对于有向图,顶点vi的出度OD(vi)等于邻接矩阵第i行元素之和;顶点vi的入度ID(vi)等于邻接矩阵第i列元素之和,即:对于无向图,顶点vi的度等于邻接矩阵第i行的元素之和,即:OD(vOD(vi i)=)=ID(vID(vi i)=)=TD(vi)=第25页/共141页26 若G是网(有权图),邻接矩阵定义为V2V1V3V435214如图:如图:Wij 若 或 E(G)A i,j =0或 若其它V1 V2 V3 V4V1 V2 V3 V4第26页/共141页27 顶点表顶点表
14、:一个记录各个顶点信息的一维数组,一个记录各个顶点信息的一维数组,邻接矩阵邻接矩阵:一个表示各个顶点之间的关系(边或弧)的二维数:一个表示各个顶点之间的关系(边或弧)的二维数组。组。使用邻接矩阵存储结构,可用一维数组表示图的顶点集合,用二维数组表示图的顶点之间关系(边或弧)的集合,数据类型定义如下:#define MAX_VERTEX_NUM 20 /最大顶点数typedef int AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;/邻接矩阵类型typedef struct VertexType vexsMAX_VERTEX_NUM;/顶点表AdjMatrix ar
15、cs;/邻接矩阵int vexnum,arcnum;/图的顶点数和弧数 MGraph;由于一般图的边或弧较少,其邻接矩阵的非零元素较少,属稀疏矩阵,因此会造成一定存储空间的浪费。第27页/共141页28 邻接表邻接表 图的链式存储结构 1)为每个顶点建立一个单链表,2)第i个单链表中包含顶点Vi的所有邻接顶点。邻接表是图的一种链式存储结构。类似于树的孩子链表表示法。在邻接表中为图中每个顶点建立一个单链表,用单链表中的一个结点表示依附于该顶点的一条边(或表示以该顶点为弧尾的一条弧),称为边(或弧)结点。第28页/共141页2925341543533412212123451.无向图邻接表G2123
16、45adjvex nextarcvexdata firstarc第29页/共141页302.有向图邻接表234143121234如图G1的邻接表为:G11234第30页/共141页31 在邻接表的在邻接表的边链表边链表中,各个边结点的链入顺序中,各个边结点的链入顺序任意任意,视,视边结点输入次序而定。边结点输入次序而定。设图中有设图中有 n n 个顶点,个顶点,e e 条边,则用邻接表表示条边,则用邻接表表示无向图无向图时,时,需要需要 n n 个顶点结点,个顶点结点,2 2e e 个边结点;用邻接表表示个边结点;用邻接表表示有向图有向图时,时,若不考虑逆邻接表,只需若不考虑逆邻接表,只需 n
17、 n 个顶点结点,个顶点结点,e e 个边结点。个边结点。建立邻接表的建立邻接表的时间复杂度时间复杂度为为O(n*e)O(n*e)。若顶点信息即为顶若顶点信息即为顶点的下标,则点的下标,则时间复杂度时间复杂度为为O(n+e)O(n+e)。第31页/共141页32存储表示存储表示typedef struct ArcNodetypedef struct ArcNodeint adjvex;/int adjvex;/该弧所指向的顶点的位置该弧所指向的顶点的位置struct ArcNode *nextarc;/struct ArcNode *nextarc;/指向下一条弧的指针指向下一条弧的指针 in
18、t int *info;/info;/该弧相关信息的指针该弧相关信息的指针 ArcNode;/ArcNode;/边结点类型边结点类型typedef struct VNodetypedef struct VNodeVertexType data;/VertexType data;/顶点信息顶点信息ArcNode*firstarc;/ArcNode*firstarc;/指向第一条依附该顶点的弧的指针指向第一条依附该顶点的弧的指针VNode,AdjListMAX_VERTEX_NUM;/VNode,AdjListMAX_VERTEX_NUM;/邻接表邻接表typedef structtypedef
19、structAdjList vertices;AdjList vertices;int vexnum,arcnum;/int vexnum,arcnum;/图的当前顶点数和弧数图的当前顶点数和弧数 int kind;int kind;/图的种类标志图的种类标志ALGraph;ALGraph;第32页/共141页3325341543533412212123451.无向图邻接表二、邻接表二、邻接表G212345adjvex nextarcvexdata firstarc第33页/共141页341.无向图邻接表对图中每个顶点Vi建立一个单链表,链表中的结点表示依附于顶点Vi的边,每个链表结点为两个域
20、.其中:邻接点域(adjvex)记载与顶点Vi邻接的顶点信息;链域(nextarc)指向下一个与顶点Vi邻接的链表p结点每个链表设一个头结点,头结点结构为:其中:vexdata存放顶点信息(姓名、编号等);firstarc指向链表的第一个结点。二、邻接表二、邻接表adjvex nextarcvexdata firstarc第34页/共141页35二、邻接表(adjacency list)如图G2的邻接表为:2534154353341221212345G212345第35页/共141页36BACDFE例 20 A 1 41 B 0 4 52 C 3 53 D 2 54 E 0 15 F 1 2
21、3第36页/共141页372.有向图邻接表234143121234特点:1.n个顶点,e条弧的有向图,需n个表头结点,e 个表结点 2.第 i 条链表上的结点数,为 Vi 的出度 (求顶点的出度易,求入度难)(求顶点的出度易,求入度难)如图G1的邻接表为:G11234第37页/共141页381 4230 120 1 2 3 4 A B C D E2.有向图的邻接表ABECF可见,在有向图的邻接表中不易找到指向该顶点的弧。第38页/共141页393.有向图逆邻接表123411431234此时,第i条链表上的结点数,为Vi的入度如图G1的逆邻接表为:G1第39页/共141页40ABECD有向图的逆
22、邻接表A B C D E 30342001234在有向图的邻接表中,对每个顶点,链接的是指向该顶点的弧。在有向图的在有向图的邻接表邻接表中,第中,第 i i 个链表中结点的个数是顶点个链表中结点的个数是顶点ViVi的的出度出度。在有向图的在有向图的逆邻接表逆邻接表中,中,第第 i i 个链表中结点的个数是个链表中结点的个数是顶点顶点ViVi 的的入度入度。第40页/共141页414.带权有向图的邻接表链表中每个结点为三个域.邻接点 权带权图的边结点中带权图的边结点中infoinfo保存该边上的权值保存该边上的权值 。第41页/共141页42ABECD4.带权有向图的邻接表A B C D E 0
23、12341 103 7 0 4 4 22 3 2 8 1022548371 25 顶点顶点 Vi Vi 的边链表的头结点存放在下标为的边链表的头结点存放在下标为 i i 的顶点数组中。的顶点数组中。第42页/共141页43 十字链表十字链表 十字链表十字链表十字链表十字链表(Orthogonal List)(Orthogonal List)是是是是有向图有向图有向图有向图的另一种链式的另一种链式的另一种链式的另一种链式存储结构。存储结构。存储结构。存储结构。可看作是将有向图的邻接表和逆邻接表结合的一种链表。可看作是将有向图的邻接表和逆邻接表结合的一种链表。可看作是将有向图的邻接表和逆邻接表结合
24、的一种链表。可看作是将有向图的邻接表和逆邻接表结合的一种链表。在在在在十字链表十字链表十字链表十字链表中,为每个顶点中,为每个顶点中,为每个顶点中,为每个顶点v v v vi i i i设置一个结点,它包含数设置一个结点,它包含数设置一个结点,它包含数设置一个结点,它包含数据域据域据域据域datadatadatadata和两个链域和两个链域和两个链域和两个链域firstoutfirstoutfirstoutfirstout、firstinfirstinfirstinfirstin,称为,称为,称为,称为顶点结点顶点结点顶点结点顶点结点。数据域数据域数据域数据域datadatadatadata用
25、于存放顶点用于存放顶点用于存放顶点用于存放顶点v v v vi i i i的有关信息;链域的有关信息;链域的有关信息;链域的有关信息;链域firstinfirstinfirstinfirstin指向指向指向指向以顶点以顶点以顶点以顶点v v v vi i i i为弧头的第一个弧结点;链域为弧头的第一个弧结点;链域为弧头的第一个弧结点;链域为弧头的第一个弧结点;链域firstoutfirstoutfirstoutfirstout指向以顶点指向以顶点指向以顶点指向以顶点v v v vi i i i为弧尾的第一个弧结点。为弧尾的第一个弧结点。为弧尾的第一个弧结点。为弧尾的第一个弧结点。弧结点弧结点弧
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构图 结构 动态
限制150内