图数据结构C语言版.ppt
《图数据结构C语言版.ppt》由会员分享,可在线阅读,更多相关《图数据结构C语言版.ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7 7章章 图图图是另一种非线性数据结构,是一种更为复杂的数据图是另一种非线性数据结构,是一种更为复杂的数据结构。在图中,数据元素之间是多对多的关系,即一个数结构。在图中,数据元素之间是多对多的关系,即一个数据元素对应多个直接前驱元素和多个直接后继元素。图的据元素对应多个直接前驱元素和多个直接后继元素。图的应用领域十分广泛,如化学分析、工程设计、遗传学、人应用领域十分广泛,如化学分析、工程设计、遗传学、人工智能等。工智能等。7.1 7.1 图的基本概念图的基本概念7.1.1 图的定义图是由顶点集合与边的集合组成的数据结构。图图是由顶点集合与边的集合组成的数据结构。图G的的形式化定义为形式化
2、定义为G=(V,E)其中,其中,V是图中结点是图中结点(Vertices)的非空有限集合,的非空有限集合,E是是图中边图中边(Edges)的有限集合。即图的定义也可以这样表述:的有限集合。即图的定义也可以这样表述:图是由有限个结点的集合图是由有限个结点的集合(V)及结点与结点相连的边的集合及结点与结点相连的边的集合(E)组合而成。组合而成。7.1 7.1 图的基本概念图的基本概念如果如果E,则,则表示从顶点表示从顶点x到顶点到顶点y存在一存在一条弧,条弧,x称为弧尾或起始点,称为弧尾或起始点,y称为弧头或终端点。这种图称为弧头或终端点。这种图的边是有方向的,这样的图称为有向图。如果的边是有方向
3、的,这样的图称为有向图。如果E且且有有E,即,即E是对称关系,这时用无序对是对称关系,这时用无序对(x,y)代替两代替两个有序对,表示个有序对,表示x与与y之间存在一条边,这样的图称为无向之间存在一条边,这样的图称为无向图。有向图和无向图的表示如图图。有向图和无向图的表示如图7.1所示。所示。7.1 7.1 图的基本概念图的基本概念在在图图7.1中中,有有向向图图G1可可以以表表示示为为G1=(V1,E1),其其中中,顶顶点点集集合合V1=A,B,C,D,边边的的集集合合E1=,。无无向向图图G2可可 以以 表表 示示 为为 G2=(V2,E2),其其 中中,顶顶 点点 集集 合合V2=A,B
4、,C,D,边边的的集集合合E2=(A,B),(A,D),(B,C),(B,D),(C,D)。7.1 7.1 图的基本概念图的基本概念假假设设图图的的顶顶点点数数目目是是n,图图的的边边数数或或者者弧弧的的数数目目是是e。如如果果不不考考虑虑顶顶点点到到自自身身的的边边或或弧弧,即即如如果果存存在在弧弧,则则vivj。对对于于无无向向图图,边边数数e的的取取值值范范围围为为0n(n-1)/2。将将具具有有n(n-1)/2条条边边的的无无向向图图称称为为完完全全图图或或无无向向完完全全图图。对对于于有有向向图图,弧弧度度e的的取取值值范范围围是是0n(n-1)。将将具具有有n(n-1)条条弧弧的的
5、有有向向图图称称为为有有向向完完全全图图。当当enlogn时,称为稠密图。时,称为稠密图。7.1 7.1 图的基本概念图的基本概念7.1.2 图的相关概念1.邻接顶点在无向图在无向图G=(V,E)中,如果中,如果(u,v)是是G中的一条边,则中的一条边,则称称u和和v互为邻接顶点,并称边互为邻接顶点,并称边(u,v)依附于顶点依附于顶点u和和v。在。在图图7.1所示的无向图所示的无向图G2中,顶点中,顶点A的邻接顶点有的邻接顶点有B和和D。在。在有向图有向图G=(V,A)中,如果中,如果是是G的一条弧,则称顶点的一条弧,则称顶点u邻邻接到顶点接到顶点v,顶点,顶点v邻接自顶点邻接自顶点u,并称
6、,并称与顶点与顶点u和顶和顶点点v相关联。在图相关联。在图7.1所示的有向图所示的有向图G1中,顶点中,顶点A邻接到顶邻接到顶点点B,弧,弧与顶点与顶点A和和B相关联。相关联。7.1 7.1 图的基本概念图的基本概念2.顶点的度顶点顶点v的度是指与其相关联的边的数目,记作的度是指与其相关联的边的数目,记作TD(v)。对于有向图,顶点的度为该顶点的入度与出度之和,即对于有向图,顶点的度为该顶点的入度与出度之和,即TD(v)=ID(v)+OD(v)。其中,顶点。其中,顶点v的入度的入度ID(v)是以是以v为终为终点的有向边点的有向边(弧弧)的条数;顶点的条数;顶点v的出度的出度OD(v)是以是以v
7、为始点为始点的有向边的有向边(弧弧)的条数。在图的条数。在图7.1所示的有向图所示的有向图G1中,顶点中,顶点A的入度的入度ID(A)为为2,顶点,顶点A的出度的出度OD(A)为为3,因此,顶点,因此,顶点A的度的度TD(A)=ID(A)+OD(A)=2+3=5。7.1 7.1 图的基本概念图的基本概念3.路径在图在图G=(V,E)中,如果从顶点中,如果从顶点vi出发有一组边可到达顶出发有一组边可到达顶点点vj,则称顶点,则称顶点vi到顶点到顶点vj的顶点序列为从顶点的顶点序列为从顶点vi到顶点到顶点vj的路径。在图的路径。在图7.1所示的无向图所示的无向图G2中,从顶点中,从顶点A到顶点到顶
8、点C的的路径为路径为A,B,C或或A,D,C。7.1 7.1 图的基本概念图的基本概念4.回路在路径中,如果第一个顶点与最后一个顶点相同,则在路径中,如果第一个顶点与最后一个顶点相同,则这样的路径称为回路或环。在路径所经过的顶点序列中,这样的路径称为回路或环。在路径所经过的顶点序列中,如果顶点不重复出现,则称这样的路径为简单路径。在回如果顶点不重复出现,则称这样的路径为简单路径。在回路中,除了第一个顶点和最后一个顶点外,如果其他的顶路中,除了第一个顶点和最后一个顶点外,如果其他的顶点不重复出现,则称这样的回路为简单回路或简单环。点不重复出现,则称这样的回路为简单回路或简单环。7.1 7.1 图
9、的基本概念图的基本概念5.子图假设存在两个图假设存在两个图G=V,E和和G=V,E,如果,如果G的顶点的顶点和关系都是和关系都是V的子集,即有的子集,即有VV,EE,则,则G为为G的子图,如的子图,如图图7.2所示。所示。7.1 7.1 图的基本概念图的基本概念6.连通图和强连通图在无向图中,如果从顶点在无向图中,如果从顶点vi到顶点到顶点vj存在路径,则称存在路径,则称顶点顶点vi到到vj是连通的。如果图中的任何两个顶点之间都是连是连通的。如果图中的任何两个顶点之间都是连通的,则称图是连通图。无向图中的极大连通子图称为连通的,则称图是连通图。无向图中的极大连通子图称为连通分量。无向图通分量。
10、无向图G3与连通分量如图与连通分量如图7.3所示。所示。7.1 7.1 图的基本概念图的基本概念在在有有向向图图中中,如如果果对对于于任任意意两两个个顶顶点点vi和和vj,且且vivj,从从顶顶点点vi到到顶顶点点vj和和顶顶点点vj到到顶顶点点vi都都存存在在路路径径,则则该该图图称称为为强强连连通通图图。有有向向图图的的极极大大强强连连通通子子图图称称为为强强连连通通分分量量。有向图有向图G4的强连通分量如图的强连通分量如图7.4所示。所示。7.1 7.1 图的基本概念图的基本概念7.生成树一个连通图的生成树是一个极小连通子图,它含有图一个连通图的生成树是一个极小连通子图,它含有图中的全部
11、顶点,但只有足以构成一棵树的中的全部顶点,但只有足以构成一棵树的n-1条边。图条边。图7.3中无向图中无向图G3的最大连通分量的一棵生成树如图的最大连通分量的一棵生成树如图7.5所示。所示。7.1 7.1 图的基本概念图的基本概念8.权在实际应用中,图的边或弧往往与具有一定意义的数在实际应用中,图的边或弧往往与具有一定意义的数有关,这种与边或弧相关的数称为权,权反映了这条边或有关,这种与边或弧相关的数称为权,权反映了这条边或弧的某种特征的数据。例如,权通常表示两个顶点之间的弧的某种特征的数据。例如,权通常表示两个顶点之间的距离或者时间。距离或者时间。9.网带权的图称为网。一个网如图带权的图称为
12、网。一个网如图7.6所示。所示。7.1 7.1 图的基本概念图的基本概念7.1.3 图的抽象数据类型1.数据对象集合图的数据对象集合为图的各个元素的集合。图分为有向图和无向图,图中结点之间的关系用弧或边表示,连接弧或边的结点称为顶点。2.基本操作集合(1)CreateGraph(&G):图的的创建。建。初始条件:初始条件:图G不存在。不存在。操作操作结果:构造一个果:构造一个图G。(2)DestroyGraph(&T):销毁图。初始条件:初始条件:图G存在。存在。操作操作结果:果:销毁图G。7.1 7.1 图的基本概念图的基本概念(3)LocateVertex(G,v):根据:根据顶点点值定位
13、。定位。初始条件:初始条件:图G存在,存在,顶点点v值合法。合法。操作操作结果:如果果:如果图G中存在中存在顶点点v,则返回返回顶点点v在在图G中的位置。如果中的位置。如果图G中没有中没有顶点点v,则返回返回值为空。空。(4)GetVertex(G,i):根据序号定位。:根据序号定位。初始条件:初始条件:图G存在。存在。操作操作结果:返回果:返回图G中序号中序号i对应的的顶点点值。(5)FirstAdjVertex(G,v):返回:返回v的第一个的第一个邻接接顶点。点。初始条件:初始条件:图G存在。存在。操作操作结果:返回果:返回图G中中顶点点v的第一个的第一个邻接接顶点。如果点。如果v没有没
14、有邻接接顶点或点或图中没有中没有顶点点v,则函数返回空。函数返回空。7.1 7.1 图的基本概念图的基本概念(6)NextAdjVertex(G,v,w):返回:返回v的下一个的下一个邻接接顶点。点。初始条件:初始条件:图G存在,存在,w是是图G中中v的某个的某个邻接接顶点。点。操作操作结果:返回果:返回顶点点v的下一个的下一个邻接接顶点。点。(7)InsertVertex(&G,v):插入:插入顶点。点。初始条件:初始条件:图G存在,存在,v值合法。合法。操作操作结果:在果:在图G中增加新的中增加新的顶点点v,图的的顶点数增点数增1。(8)DeleteVertex(&G,v):删除除顶点。点
15、。初始条件:初始条件:图G存在,存在,v值合法。合法。操作操作结果:果:删除除图G的的顶点点v及与及与顶点点v相关相关联的弧。的弧。7.1 7.1 图的基本概念图的基本概念(9)InsertArc(&G,v,w):插入弧。:插入弧。初始条件:初始条件:图G存在,存在,v和和w合法。合法。操作操作结果:在果:在图G中增加一条从中增加一条从v到到w的弧。的弧。(10)DeleteArc(&G,v,w):删除弧。除弧。初始条件:初始条件:图G存在,存在,v和和w合法,且存在弧合法,且存在弧(v,w)。操作操作结果:果:删除除图G中从中从v到到w的弧。的弧。(11)DFSTraverseGraph(G
16、):图的深度遍的深度遍历操作。操作。初始条件:初始条件:图G存在。存在。操作操作结果:从某个果:从某个顶点出点出发,按照深度,按照深度优先的次序,先的次序,对图G中的每个中的每个顶点点访问一次且一次且仅访问一次。一次。7.2 图的存储结构7.2.1 邻接矩阵表示法图的邻接矩阵表示法也称为数组表示法,它采用两个图的邻接矩阵表示法也称为数组表示法,它采用两个数组来表示图:一个是用于存储顶点信息的一维数组,一数组来表示图:一个是用于存储顶点信息的一维数组,一个是用于存储图中顶点之间的关联关系的二维数组。这个个是用于存储图中顶点之间的关联关系的二维数组。这个关联关系的数组被称为邻接矩阵。关联关系的数组
17、被称为邻接矩阵。如果图是一个无权图,则图的邻接矩阵是具有以下性如果图是一个无权图,则图的邻接矩阵是具有以下性质的质的nn的矩阵:的矩阵:7.2 图的存储结构在在 图图 7.1中中,有有 向向 图图 G1的的 弧弧 的的 集集 合合 为为A=,,无无 向向 图图G2的的边边的的集集合合为为E=(A,B),(A,D),(B,C),(B,D),(C,D)。它它们们的邻接矩阵表示如图的邻接矩阵表示如图7.7所示。所示。7.2 图的存储结构图的邻接矩阵存储结构用图的邻接矩阵存储结构用C语言描述如下语言描述如下#defineINFINITY32768/*定定义一个无限大的一个无限大的值*/#defineM
18、AXVERTEX50/*最大最大顶点个数点个数*/typedefenumDG,DN,UG,UNGraphKind;/*图的的类型:有向型:有向图、有向网、无向、有向网、无向图和无向网和无向网*/typedefstructVRTypeadj;/*对于无于无权图,用,用1表示相表示相邻,0表示不相表示不相邻;对于于带权图,存,存储权值*/InfoPtr*info;/*与弧或与弧或边的相关信息的相关信息*/ArcNode,AdjMatrixMAXVERTEXMAXVERTEX;typedefstruct/*图的的类型定型定义*/VertexTypevertexMAXVERTEX;/*顶点数点数组*/
19、AdjMatrixarcs;/*邻接矩接矩阵,存,存储边或弧的信息或弧的信息*/intvexnum,arcnum;/*顶点数和点数和边(弧弧)的数目的数目*/GraphKindkind;/*图的的类型型*/MGraph;7.2 图的存储结构【例例7.1】采采用用邻接接矩矩阵创建建一一个个有有向向网网N,如如图7.9所示。所示。voidCreateGraph(MGraph*N)/*采用采用邻接矩接矩阵表示法表示法创建有向网建有向网N*/inti,j,k,w;VertexTypev1,v2;printf(请输请输入有向网的入有向网的顶顶点数点数,弧数弧数:);scanf(%d,%d,&(*N).v
20、exnum,&(*N).arcnum);printf(请输请输入入%d个个顶顶点点:,N-vexnum);7.2 图的存储结构for(i=0;ivexnum;i+)/*创建一个数建一个数组,用于保存网的各个,用于保存网的各个顶点点*/scanf(%s,N-vertexi);for(i=0;ivexnum;i+)/*初始化初始化邻接矩接矩阵*/for(j=0;jvexnum;j+)N-arcsij.adj=INFINITY;N-arcsij.info=NULL;/*弧的信息初始化弧的信息初始化为空空*/printf(请输入入%d条弧的弧尾条弧的弧尾弧弧头权值(以空格分隔以空格分隔):n,N-ar
21、cnum);for(k=0;karcnum;k+)scanf(%s%s%d,v1,v2,&w);/*输入两个入两个顶点和弧的点和弧的权值*/i=LocateVertex(*N,v1);j=LocateVertex(*N,v2);N-arcsij.adj=w;N-kind=DN;/*图的的类型型为有向网有向网*/7.2 图的存储结构intLocateVertex(MGraphN,VertexTypev)/*在在顶点向量中点向量中查找找顶点点v,找到返回在向量的序号,找到返回在向量的序号,否否则返回返回-1*/inti;for(i=0;iN.vexnum;+i)if(strcmp(N.vertex
22、i,v)=0)returni;return-1;7.2 图的存储结构voidDestroyGraph(MGraph*N)/*销毁网网N*/inti,j;for(i=0;ivexnum;i+)/*释放弧的相关信息放弧的相关信息*/for(j=0;jvexnum;j+)if(N-arcsij.adj!=INFINITY)/*如果存在弧如果存在弧*/if(N-arcsij.info!=NULL)/*如果弧有相关信息,如果弧有相关信息,释放放该信息占用的空信息占用的空间*/free(N-arcsij.info);N-arcsij.info=NULL;N-vexnum=0;/*将网的将网的顶顶点数置点数
23、置为为0*/N-arcnum=0;/*将网的弧的数目置将网的弧的数目置为为0*/7.2 图的存储结构7.2.2 邻接表表示法一个图的邻接表表示由表头结点表和边表两部分构成。(1)表头结点表:表头结点采用顺序存储结构实现,这样可以随机地访问任意顶点。表头结点由两个域组成:数据域和指针域。其中,数据域用来存放顶点信息,指针域用来指向边表中的第一个结点。(2)边表:边表由三个域组成:邻接点域、数据域和指针域。其中,邻接点域表示与相应的表头顶点邻接点的位置,数据域存储与边或弧的信息,指针域用来指示下一个边或弧的结点。表头结点与边表结点的存储结构如图7.11所示。7.2 图的存储结构例例如如,图图7.1
24、中中的的两两个个图图G1和和G2用用邻邻接接表表表表示示如如图图7.12所所示示。用用表表头头结结点点存存储储图图中中的的各各个个顶顶点点,边边表表存存储储与与对应结点相关联的顶点编号。对应结点相关联的顶点编号。7.2 图的存储结构图的邻接表存储结构可以用图的邻接表存储结构可以用C语言描述如下:语言描述如下:#defineMAXVERTEX100/*最大最大顶点个数点个数*/typedefenumDG,DN,UG,UNGraphKind;/*图的的类型:有向型:有向图、有向网、无、有向网、无向向图和无向网和无向网*/typedefstructArcNode/*边表表结点的点的类型定型定义*/i
25、ntadjvex;/*弧指向的弧指向的顶点的位置点的位置*/InfoPtr*info;/*与弧相关的信息与弧相关的信息*/structArcNode*nextarc;/*指示下一个与指示下一个与该顶点相点相邻接的接的顶点点*/ArcNode;typedefstructVNode/*表表头结点的点的类型定型定义*/VertexTypedata;/*用于存用于存储顶点点*/ArcNode*firstarc;/*指示第一个与指示第一个与该顶点点邻接的接的顶点点*/VertexNode,AdjListMAXVERTEX;typedefstruct/*图的的类型定型定义*/AdjListvertex;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言版
限制150内