数据结构图结构.ppt
《数据结构图结构.ppt》由会员分享,可在线阅读,更多相关《数据结构图结构.ppt(74页珍藏版)》请在三一办公上搜索。
1、数据结构课程的内容,多对多(m:n),特点:非线性结构,是研究数据元素之间的多对多的关系。在这种结构中,任意两个元素之间可能存在关系。即结点之间的关系可以是任意的,图中任意元素之间都可能相关。图的应用极为广泛,已渗入到诸如语言学、逻辑学、物理、化学、电讯、计算机科学以及数学的其它分支。,第7章 图,7.1 基本术语7.2 存储结构7.3 图的遍历7.4 图的其他运算7.5 图的应用,第7章 图,7.1 图的基本术语,图:记为 G(V,E)其中:V 是G的顶点集合,是有穷非空集;E 是G的边集合,是有穷集。,问:当E(G)为空时,图G存在否?答:还存在!但此时图G只有顶点而没有边。,有向图:无向
2、图:完全图:,图G中的每条边都是有方向的;图G中的每条边都是无方向的;图G任意两个顶点都有一条边相连接;,若 n 个顶点的无向图有 n(n-1)/2 条边,称为无向完全图若 n 个顶点的有向图有n(n-1)条边,称为有向完全图,V=vertex E=edge,证明:,完全有向图有n(n-1)条边。证明:若是完全有向图,则顶点1必与所有其他顶点各有2条连线,即有2(n-1)条边,顶点2有2(n-2)条边,顶点n-1有2条边,顶点n有0条边.总边数2(n-1 n-210)=2(n-1+0)n/2=n(n-1),完全无向图有n(n-1)/2 条边。证明:若是完全无向图,则顶点1必与所有其他顶点各有1
3、条连线,即有n-1条边,顶点2有n-2条边,顶点n-1有1条边,顶点n有0条边.总边数 n-1 n-210=(n-1+0)n/2=n(n-1)/2,例:判断下列4种图形各属什么类型?,无向,无向图(树),有向图,有向,n(n-1)/2 条边,n(n-1)条边,G1的顶点集合为V(G1)=0,1,2,3边集合为E(G1)=(0,1),(0,2),(0,3),(1,2),(1,3),(2,3),完全图,完全图,稀疏图:稠密图:,设有两个图 G(V,E)和 G(V,E)。若 V V 且 E E,则称 图G 是 图G 的子图。,子 图:,边较少的图。通常边数n2边很多的图。无向图中,边数接近n(n-1
4、)/2;有向图中,边数接近n(n-1),带权图:,即边上带权的图。其中权是指每条边可以标上具有某种含义的数值(即与边相关的数)。,连通图:,在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与v2是连通的。如果图中任意一对顶点都是连通的,则称此图是连通图。非连通图的极大连通子图叫做连通分量。,带权图,在有向图中,若对于每一对顶点vi和vj,都存在一条从vi到vj和从vj到vi的路径,则称此图是强连通图。非强连通图的极大强连通子图叫做强连通分量。,强连通图:,网 络:,有两类图形不在本章讨论之列:,邻接点:,有向边(u,v)称为弧,边的始点u叫弧尾,终点v叫弧头,顶点v的度是与它相关联的边的
5、条数。记作TD(v)。在有向图中,顶点的度等于该顶点的入度与出度之和。顶点 v 的入度是以 v 为终点的有向边的条数,记作 ID(v);顶点 v 的出度是以 v 为始点的有向边的条数,记作 OD(v)。,若(u,v)是 E(G)中的一条边,则称 u 与 v 互为邻接顶点,弧头和尾:,度、入度和出度:,问:当有向图中仅1个顶点的入度为0,其余顶点的入度均为1,此时是何形状?,TD(vi)顶点vi的度 E 图中边的个数N 图中顶点的个数=E=1/2TD(vi),答:是树!而且是一棵有向树!,生成树:是一个极小连通子图,它含有图中全部顶点,但只 有n-1条边。如果在生成树上添加1条边,必定构成一个环
6、。若图中有n个顶点,却少于n-1条边,必为非连通图。生成森林:由若干棵生成树组成,含全部顶点,但构成这些 树的边是最少的。,简单路径:,路径上各顶点 v1,v2,.,vm 均不互相重复。,回 路:,例:,若路径上第一个顶点 v1 与最后一个顶点vm 重合,则称这样的路径为回路或环。,路径:,在图 G(V,E)中,若从顶点 vi 出发,沿一些边经过一些顶点 vp1,vp2,vpm,到达顶点vj。则称顶点序列(vi vp1 vp2.vpm vj)为从顶点vi 到顶点 vj 的路径。它经过的边(vi,vp1)、(vp1,vp2)、.、(vpm,vj)应当是属于E的边。,路径长度:,非带权图的路径长度
7、是指此路径上 边的条数;带权图的路径长度是指路径上各边的权之和。,ADT Graph 数据对象V:v是具有相同特性的数据元素的集合,称为顶点集。数据关系R:R=VR;VR=|v,wV 且 P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息基本操作P:CreatGraph(初始条件:图G存在,v和图中顶点有相同特征。操作结果:在图G中添加新顶点。(参见P156-257),图的抽象数据类型,注意:V 的大小写含义不同!,7.2 图的存储结构,图的特点:非线性结构(m:n),邻接表邻接多重表十字链表,设计为邻接矩阵,链式存储结构:,顺序存储结构:,无!,(多个顶点,无序可言)但可用
8、数组描述元素间关系。,可用多重链表,重点介绍:,邻接矩阵(数组)表示法邻接表(链式)表示法,一、邻接矩阵(数组)表示法,建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间关系)。设图 A=(V,E)有 n 个顶点,则图的邻接矩阵是一个二维数组 A.Edgenn,定义为:,例1:,邻接矩阵:,A.Edge=,(v1 v2 v3 v4 v5),v1v2v3v4v5,0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0,分析1:无向图的邻接矩阵是对称的;分析2:顶点i 的度第 i 行(列)中1 的个数;特别:完全图的邻接矩阵中,对角元素为0,其余
9、全1。,0 1 0 1 01 0 1 0 10 1 0 1 11 0 1 0 10 1 1 1 0,0 1 0 1 01 0 1 0 10 1 0 1 11 0 1 0 10 1 1 1 0,顶点表:,例2:有向图的邻接矩阵,分析1:有向图的邻接矩阵可能是不对称的。分析2:顶点的出度=第i行元素之和,OD(Vi)=A.Edge i j 顶点的入度=第i列元素之和。ID(Vi)=A.Edge j i 顶点的度=第i行元素之和+第i列元素之和,即:TD(Vi)=OD(Vi)+ID(Vi),邻接矩阵:,A.Edge=,(v1 v2 v3 v4),v1v2v3v4,0 0 0 00 0 0 0 0 0
10、 0 0 0 0 0 0,注:在有向图的邻接矩阵中,第i行含义:以结点vi为尾的弧(即出度边);第i列含义:以结点vi为头的弧(即入度边)。,顶点表:,0 1 1 00 0 0 0 0 0 0 1 1 0 0 0,0 1 1 00 0 0 0 0 0 0 1 1 0 0 0,容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻接点等等。n个顶点需要n*n个单元存储边(弧);空间效率为O(n2)。对稀疏图而言尤其浪费空间。,特别讨论:网(即有权图)的邻接矩阵,定义为:,以有向网为例:,邻接矩阵:,N.Edge=,(v1 v2 v3 v4 v5 v6),邻接矩阵法优点:,邻接
11、矩阵法缺点:,顶点表:,5 7 4 8 9 5 6 5 3 1,5 7 4 8 9 5 6 5 3 1,注:用两个数组分别存储顶点表和邻接矩阵#define INFINITY INT_MAX/最大值#define MAX_VERTEX_NUM 20/假设的最大顶点数Typedef enum DG,DN,AG,AN GraphKind;/有向/无向图,有向/无向网Typedef struct ArcCell/弧(边)结点的定义 VRType adj;/顶点间关系,无权图取1或0;有权图取权值类型 InfoType*info;/该弧相关信息的指针ArcCell,AdjMatrix MAX_VERT
12、EX_NUM MAX_VERTEX_NUM;Typedef struct/图的定义VertexType vexs MAX_VERTEX_NUM;/顶点表,用一维向量即可AdjMatrix arcs;/邻接矩阵Int Vernum,arcnum;/顶点总数,弧(边)总数GraphKind kind;/图的种类标志Mgraph;,图的邻接矩阵存储表示(参见教材P161),对于n个顶点的图或网,空间效率=O(n2),Status CreateUDN(Mgraph/CreateUDN,例:用邻接矩阵生成无向网的算法(参见教材P162),对于n个顶点e条弧的网,建网时间效率=O(n2+n+e*n),二、
13、邻接表(链式)表示法,对每个顶点vi 建立一个单链表,把与vi有关联的边的信息(即度或出度边)链接起来,表中每个结点都设为3个域;,每个单链表还应当附设一个头结点(设为2个域),存vi信息;,表结点,头结点,邻接点域,表示vi一个邻接点的位置,链域,指向vi下一个边或弧的结点,数据域,与边有关信息(如权值),数据域,存储顶点vi 信息,链域,指向单链表的第一个结点,每个单链表的头结点另外用顺序存储结构存储。,例1:无向图的邻接表,邻接表,例2:有向图的邻接表,邻接表(出边),逆邻接表(入边),注:邻接表不唯一,因各个边结点的链入顺序是任意的。,例3:已知某网的邻接(出边)表,请画出该网络。,8
14、0,64,1,2,5,当邻接表的存储结构形成后,图便唯一确定!,分析1:对于n个顶点e条边的无向图,邻接表中除了n个头结点外,只有2e个表结点,空间效率为O(n+2e)。若是稀疏图(en2),则比邻接矩阵表示法O(n2)省空间。,邻接表存储法的特点:,分析2:在有向图中,邻接表中除了n个头结点外,只有e个表结点,空间效率为O(n+e)。若是稀疏图,则比邻接矩阵表示法合适。,它其实是对邻接矩阵法的一种改进,怎样计算无向图顶点的度?,邻接表的缺点:,怎样计算有向图顶点的出度?怎样计算有向图顶点的入度?怎样计算有向图顶点Vi的度:,需遍历全表,邻接表的优点:,TD(Vi)=单链表中链接的结点个数,O
15、D(Vi)单链出边表中链接的结点数I D(Vi)邻接点为Vi的弧个数,TD(Vi)=OD(Vi)+I D(Vi),空间效率高;容易寻找顶点的邻接点;,判断两顶点间是否有边或弧,需搜索两结点对应的单链表,没有邻接矩阵方便。,讨论:邻接表与邻接矩阵有什么异同之处?,1.联系:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。2.区别:对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。邻接矩阵的空间复杂度为O(n2),而邻接表的空间复杂度为O(n+e)。3.用途:邻接矩阵多用于稠密图的存储(e接近n(n-1)/2)
16、;而邻接表多用于稀疏图的存储(en2),图的邻接表存储表示(参见教材P163),#define MAX_VERTEX_NUM 20/假设的最大顶点数Typedef struct ArcNode int adjvex;/该弧所指向的顶点位置 struct ArcNode*nextarcs;/指向下一条弧的指针 InfoArc*info;/该弧相关信息的指针 ArcNode;Typedef struct VNode/顶点结构 VertexType data;/顶点信息 ArcNode*firstarc;/指向依附该顶点的第一条弧的指针VNode,AdjList MAX_VERTEX_NUM;Typ
17、edef struct/图结构 AdjList vertics;/应包含邻接表 int vexnum,arcnum;/应包含顶点总数和弧总数 int kind;/还应说明图的种类(用标志)ALGraph;/图结构,空间效率为O(n+2e)或O(n+e)时间效率为O(n+e*n),它是有向图的另一种链式结构。思路:将邻接矩阵用链表存储,是邻接表、逆邻接表的结合。1、每条弧对应一个结点(称为弧结点,设5个域)2、每个顶点也对应一个结点(称为顶点结点,设3个域),顶点结点,弧结点,三、十字链表,tailvex:弧尾顶点位置 headvex:弧头顶点位置hlink:弧头相同的下一弧位置tlink:弧尾
18、相同的下一弧位置info:弧信息,n个顶点用顺序存储结构,data:存储顶点信息。Firstin:以顶点为弧头的第一条弧结点。Firstout:以顶点为弧尾的第一条弧结点。,适用于有向图,#define MAX_VERTEX_NUM 20Typedef struct ArcBox/弧结点结构 int tailvex,headvex;struct ArcBox*hlink,tlink;InfoType*info;ArcBox;Typedef struct VexNode/顶点结构 VertexType data;ArcBox*firstin,*firstout;VexNode;Typedef s
19、truct VexNode xlist MAX_VERTEX_NUM;/表头向量 int vexnum,arcnum;OLGraph;/图结构,十字链表存储结构描述:,例:画出有向图的十字链表。,十字链表优点:容易操作,如求顶点的入度、出度等。空间复杂度与邻接表相同;建立的时间复杂度与邻接表相同。,数组下标不属结点分量,这是无向图的另一种存储结构,当对边操作时,无向图应采用此种结构存储。1、每条边只对应一个结点(称为边结点),设立6个域;2、每个顶点也对应一个结点(顶点结点),设立2个域;,边结点,四、邻接多重表,mark:标志域,如处理过或搜索过。Ivex,jvex:顶点域,边依附的两个顶点
20、位置。ilink:指向下一条依附顶点 i 的边结点位置。jlink:指向下一条依附顶点 j 的边结点位置。info:边信息,如权值等。,n个顶点用顺序存储结构,data:存储顶点信息。Firstedge:依附顶点的第一条边结点。,顶点结点,适用于无向图,例:画出无向图的邻接多重表,邻接多重表优点:容易操作,如求顶点的度等。空间复杂度与邻接表相同;建立的时间复杂度与邻接表相同。,数组下标不属结点分量,一、深度优先搜索二、广度优先搜索,7.3 图的遍历,遍历定义:从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。,遍历实质:找每
21、个顶点的邻接点的过程。图的特点:图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。,解决思路:可设置一个辅助数组 visited n,用来标记每个被访问过的顶点。它的初始状态为0,在图的遍历过程中,一旦某一个顶点i 被访问,就立即改 visited i为1,防止它被多次访问。,图常用的遍历:,怎样避免重复访问?,一、深度优先搜索(DFS),基本思想:仿树的先序遍历过程。,Depth_First Search,v1,DFS 结果,例1:,v2,v4,v8,v5,v3,v6,v7,例2:,v2 v1 v3 v5,DFS 结果,v4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构图 结构
链接地址:https://www.31ppt.com/p-3787994.html