数据结构 课件ch07 1图1图的定义和存储.ppt

上传人:小飞机 文档编号:2157287 上传时间:2023-01-21 格式:PPT 页数:21 大小:645.50KB
返回 下载 相关 举报
数据结构 课件ch07 1图1图的定义和存储.ppt_第1页
第1页 / 共21页
数据结构 课件ch07 1图1图的定义和存储.ppt_第2页
第2页 / 共21页
数据结构 课件ch07 1图1图的定义和存储.ppt_第3页
第3页 / 共21页
数据结构 课件ch07 1图1图的定义和存储.ppt_第4页
第4页 / 共21页
数据结构 课件ch07 1图1图的定义和存储.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《数据结构 课件ch07 1图1图的定义和存储.ppt》由会员分享,可在线阅读,更多相关《数据结构 课件ch07 1图1图的定义和存储.ppt(21页珍藏版)》请在三一办公上搜索。

1、第7章 图,数据结构讲义,-图的定义和存储,信息工程学院魏洪涛Email:,图的定义:,图G是由顶点集V和顶点间的关系集合E(边的集合)组成的一种数据结构,可以用二元组定义为:G=(V,E)。,例如,对于图7-1所示的无向图G1和有向图G2,它们的数据结构可以描述为:G1=(V1,E1),其中 V1=a,b,c,d,E1=(a,b),(a,c),(a,d),(b,d),(c,d),而G2=(V2,E2),其中V2=1,2,3,E2=,。,7.1 图的基本概念,7.2 图的存贮结构,图无法以数据元素在存储区中的物理位置来表示元素之间关系,即图没有顺序映象的存储结构。用多重链表表示图,即以一个数据

2、域和多个指针域组成的结点表示图中一个顶点,其中数据域存储该顶点的信息,指针域存储指向其邻接点的指针。常用的有邻接矩阵、邻接表和十字链表等。不管哪一种方式,它除了要存储图中各个顶点本身的信息外,同时还要存储顶点与顶点之间的所有关系(边的信息)。,多重链表,1 图的邻接矩阵表示,在邻接矩阵表示中,除了存放顶点本身信息外,还用一个矩阵表示各个顶点之间的关系。若(i,j)E(G)或i,jE(G),则矩阵中第i行 第j列元素值为1,否则为0。,7.2.1 邻接矩阵,例如,对图7-8所示的无向图和有向图的邻接矩阵。,2 从无向图的邻接矩阵可以得出如下结论,(1)矩阵是对称的,可压缩存储(上(下)三角);(

3、2)第i行或第i 列中1的个数为顶点i 的度;(3)矩阵中1的个数的一半为图中边的数目;(4)很容易判断顶点i 和顶点j之间是否有边相连(看矩阵中i行j列值是否为1)。,3 从有向图的邻接矩阵可以得出如下结论,(1)矩阵不一定是对称的;(2)第i 行中1的个数为顶点i 的出度;(3)第i列中1的个数为顶点 i的入度;(4)矩阵中1的个数为图中弧的数目;(5)很容易判断顶点i 和顶点j 是否有弧相连.,4网的邻接矩阵表示,类似地可以定义网的邻接矩阵为:wij 若(i,j)E(G)或i,jE(G)Aij=其它情形网及网的邻接矩阵见下图。,邻接矩阵法优点:容易实现图的操作,如:求某顶点的度、判断顶点

4、之间是否有边(弧)、找顶点的邻接点等等。邻接矩阵法缺点:n个顶点需要n*n个单元存储边(弧);空间效率为O(n2)。对稀疏图而言尤其浪费空间。,1图的邻接表表示,图的邻接表存储方法是一种顺序分配与链式分配相结合的存储方法,它包括两部分:一部分是单链表,用来存放边的信息;另一部分是数组,主要用来存放顶点本身的数据信息。,边结点,顶点结点,7.2.2 邻接表,左图所示的无向图G3和有向图G4的邻接表见右图所示:,2 从无向图的邻接表可以得到如下结论,(1)第i 个链表中结点数目为顶点i的度;(2)所有链表中结点数目的一半为图中边数;(3)占用的存储单元数目为n+2e。,3 从有向图的邻接表可以得到

5、如下结论,(1)第i 个链表中结点数目为顶点i的出度;(2)所有链表中结点数目为图中弧数;(3)占用的存储单元数目为n+e。,从有向图的邻接表可知,不能求出顶点的入度。为此,我们必须另外建立有向图的逆邻接表,以便求出每一个顶点的入度。,例:已知某网的邻接(出边)表,请画出该网络。,80,64,1,2,5,当邻接表的存储结构形成后,图便唯一确定!,如果是无向图,只要搜索任意一个结点的边表。有向图要搜索两个结点的边表。,邻接表的优点:空间效率高;容易寻找顶点的邻接点;邻接表的缺点:判断两顶点间是否有边或弧,需搜索两结点对应的单链表,没有邻接矩阵方便。,4 图的邻接表数据类型描述,图的邻接表数据类型

6、描述如下:#define MAXN 50/*MAXN表示图中最大顶点数*/typedef struct e_node/定义边结点的结构 int adjvex;int weight;/边的信息 struct e_node*next;E_NODE;/指向邻接点的指针typedef struct v_node/定义邻接表的表头类型 int vertex;/顶点信息 E_NODE*link;/指向“边表”的指针V_NODE;V_NODE headMAXN;,讨论:邻接表与邻接矩阵有什么异同之处?,1.联系:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。2.区别:对于任

7、一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。邻接矩阵的空间复杂度为O(n2),而邻接表的空间复杂度为O(n+e)。3.用途:邻接矩阵多用于稠密图的存储(e接近n(n-1)/2);而邻接表多用于稀疏图的存储(en2),有向图的十字链表表示法,弧结点:typedef struct arcnode int tailvex,headvex;/弧尾、弧头在表头数组中位置 struct arcnode*hlink;/指向弧头相同的下一条弧 struct arcnode*tlink;/指向弧尾相同的下一条弧AD;,顶点结点:typedef struct

8、 dnode int data;/存与顶点有关信息 struct arcnode*firstin;/指向以该顶点为弧头的第一个弧结点 struct arcnode*firstout;/指向以该顶点为弧尾的第一个弧结点DD;DD gM;/g0不用,无向图的邻接多重表表示法,顶点结点:typedef struct dnode int data;/存与顶点有关的信息 struct node*firstedge;/指向第一条依附于该顶点的边DD;DD gaM;/ga0不用,边结点:typedef struct node int mark;/标志域 int ivex,jvex;/该边依附的两个顶点在表头数组中位置 struct node*ilink,*jlink;/分别指向依附于ivex和jvex的下一条边JD;,作业,已知如图所示的有向图,请给出该图的:(1)每个顶点的入/出度;(2)邻接矩阵;(3)邻接表;(4)逆邻接表;(5)十字链表.,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号