数据结构——第7章图和广义表1.ppt
《数据结构——第7章图和广义表1.ppt》由会员分享,可在线阅读,更多相关《数据结构——第7章图和广义表1.ppt(57页珍藏版)》请在三一办公上搜索。
1、数据结构的内容,图的特点,顶点的前驱和后继个数无限制,图的应用,顶点之间的关系是任意的,图中任意两个顶点之间都可能相关,图(Graph)是一种非线性结构。,计算机科学,多对多,7.1 基本术语7.2 存储结构7.3 图的遍历7.4 连通网的最小生成树7.5 单源最短路径7.6 拓朴排序7.7 关键路径7.8 广义表,第7章 图和广义表,7.1 图的基本术语,图:记为 G(V,E)其中:V 是G的顶点集合,是有穷非空集;E 是G的边集合,是有穷集。,问:当E(G)为空时,图G存在否?答:还存在!但此时图G只有顶点而没有边。,有向图:无向图:完全图:,图G中的每条边都是有方向的;图G中的每条边都是
2、无方向的;图G任意两个顶点都有一条边相连接;,若 n 个顶点的无向图有 n(n-1)/2 条边,称为无向完全图若 n 个顶点的有向图有n(n-1)条边,称为有向完全图,V=vertex E=edge,例:判断下列4种图形各属什么类型?,无向图,无向图(树),有向图,有向图,n(n-1)/2 条边,n(n-1)条边,完全图,完全图,设有两个图 G(V,E)和 G(V,E)。若 V V 且 E E,则称 图G 是 图G 的子图。,子 图:,带权图:,即边上带权的图。其中权是指每条边可以标上具有某种含义的数值(即与边相关的数)。,带权图(带权的有向图与无向图),网 络:,顶点v的度是与它相关联的边的
3、条数。记作TD(v)。在有向图中,顶点的度等于该顶点的入度与出度之和。顶点 v 的入度是以 v 为终点的有向边的条数,记作 ID(v);顶点 v 的出度是以 v 为始点的有向边的条数,记作 OD(v)。,问:当有向图中仅1个顶点的入度为0,其余顶点的入度均为1,此时是何形状?,答:是树!而且是一棵有向树!,度入度出度,简单路径:,路径上各顶点 v1,v2,.,vm 均不互相重复。,回 路:,例:,若路径上第一个顶点 v1 与最后一个顶点vm 重合,则称这样的路径为回路或环。,路径:,在图 G(V,E)中,若从顶点 vi 出发,沿一些边经过一些顶点 vp1,vp2,vpm,到达顶点vj。则称顶点
4、序列(vi vp1 vp2.vpm vj)为从顶点vi 到顶点 vj 的路径。它经过的边(vi,vp1)、(vp1,vp2)、.、(vpm,vj)应当是属于E的边。,路径长度:,非带权图的路径长度是指此路径上边的条数;带权图的路径长度是指路径上各边的权之和。,在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与v2是连通的。如果图中任意一对顶点都是连通的,则称此图是连通图。非连通图的极大连通子图叫做连通分量。,在有向图中,若对于每一对顶点vi和vj,都存在一条从vi到vj和从vj到vi的路径,则称此图是强连通图。非强连通图的极大强连通子图叫做强连通分量。,强连通图:,连通图:,生成树:,是
5、一个极小连通子图,它含有图中全部顶点,但只有n-1条边。如果在生成树上添加1条边,必定构成一个环。若图中有n个顶点,却少于n-1条边,必为非连通图。,生成森林:,由若干棵生成树组成,含全部顶点,但构成这些树的边是最少的。,7.2 图的存储结构,图的特点:非线性结构(m:n),邻接表邻接多重表十字链表,设计为邻接矩阵,链式存储结构:,顺序存储结构:,无!,(多个顶点,无序可言)但可用数组描述元素间关系。,可用多重链表,重点介绍:,邻接矩阵(数组)表示法邻接表(链式)表示法,7.2.1 邻接矩阵(数组)表示法,一个有 n 个顶点的图,可用两个数组存储。其中一个 一维数组存储数据元素(顶点)的信息,
6、另一个二维数组(邻接矩阵)存储数据元素之间的关系(边或弧)的信息。设图 G=(V,E)有 n 个顶点,则图的邻接矩阵是一个二维数组 A nn,定义为:,例1:,邻接矩阵:,A=,(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,其余全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
7、 1 11 0 1 0 10 1 1 1 0,顶点表:,例2:有向图的邻接矩阵,分析1:有向图的邻接矩阵可能是不对称的。分析2:顶点的出度=第i行元素之和,OD(Vi)=A i j 顶点的入度=第i列元素之和。ID(Vi)=A j i 顶点的度=第i行元素之和+第i列元素之和,即:TD(Vi)=OD(Vi)+ID(Vi),邻接矩阵:,A=,(v1 v2 v3 v4),v1v2v3v4,0 0 0 00 0 0 0 0 0 0 0 0 0 0 0,注:在有向图的邻接矩阵中,第i行含义:以结点vi为尾的弧(即出度边);第i列含义:以结点vi为头的弧(即入度边)。,顶点表:,0 1 1 00 0 0
8、 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=,(v1 v2 v3 v4 v5 v6),邻接矩阵法优点:,邻接矩阵法缺点:,顶点表:,5 7 4 8 9 5 6 5 3 1,5 7 4 8 9 5 6 5 3 1,图的数组(邻接矩阵)存储表示:,#define INFINITY INT_MAX/最大值#de
9、fine MAX_VERTEX_NUM 20/最大顶点个数 typedef enum DG,DN,AG,AN GraphKind;/有向图,有向网,无向图,无向网 typedef struct ArcCell VRType adj;/VRType是顶点关系类型。对无权图用1或0表示相邻否;/对带权图,则为权值类型。InfoType*info;/该弧相关信息的指针 ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct VertexType vexsMAX_VERTEX_NUM;/顶点向量 AdjMatrix arcs;/邻接矩阵
10、 int vexnum,arcnum;/图的当前顶点数和弧(边)数 GraphKind kind;/图的种类标志 MGraph;,7.2.2 图的邻接表存储表示法(链式存储),头结点,表结点,3,1,4,2,0,4,3,1,2,0,2,1,特点:,若无向图中有 n 个顶点、e 条边,则其邻接表需 n 个头 结点和 2e 个表结点。适宜存储稀疏图。,无向图中顶点 vi 的度为第 i 个单链表中的结点数。,0,1,2,3,2,1,3,0,v1,v3,v4,v2,邻接表,逆邻接表,顶点 vi 的出度为第 i 个 单链表中的结点个数。,特点:,顶点 vi 的入度为整个单 链表中邻接点域值是 i-1 的
11、结点个数。,找出度易,找入度难。,找入度易,找出度难。,顶点 vi 的入度为第 i 个 单链表中的结点个数。,顶点 vi 的出度为整个单 链表中邻接点域值是 i-1 的结点个数。,图的邻接表存储表示:,#define MAX_VERTEX_NUM 20 typedef struct ArcNode int adjvex;/该弧所指向的顶点的位置 struct ArcNode*nextarc;/指向下一条弧的指针 InfoType*info;/该弧相关信息的指针 ArcNode;typedef struct VNode VertexType data;/顶点信息 ArcNode*firstarc
12、;/指向第一条依附该顶点的弧 VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices;int vexnum,arcnum;/图的当前顶点数和弧数 int kind;/图的种类标志 ALGraph;,例1:无向图的邻接表,例2:有向图的邻接表,邻接表(出边),逆邻接表(入边),注:邻接表不唯一,因各个边结点的链入顺序是任意的。,邻接表,例3:已知某网的邻接(出边)表,请画出该网络。,当邻接表的存储结构形成后,图便唯一确定!,分析1:对于n个顶点e条边的无向图,邻接表中除了n个头结点外,只有2e个表结点,空间效率为O(n+2e)。若是
13、稀疏图(en2),则比邻接矩阵表示法O(n2)省空间。,邻接表存储法的特点:,分析2:在有向图中,邻接表中除了n个头结点外,只有e个表结点,空间效率为O(n+e)。若是稀疏图,则比邻接矩阵表示法合适。,它其实是对邻接矩阵法的一种改进,怎样计算无向图顶点的度?,邻接表的缺点:,怎样计算有向图顶点的出度?怎样计算有向图顶点的入度?怎样计算有向图顶点Vi的度:,需遍历全表,邻接表的优点:,TD(Vi)=单链表中链接的结点个数,OD(Vi)单链出边表中链接的结点数I D(Vi)邻接点为Vi的弧个数,TD(Vi)=OD(Vi)+I D(Vi),空间效率高;容易寻找顶点的邻接点;,判断两顶点间是否有边或弧
14、,需搜索两结点对应的单链表,没有邻接矩阵方便。,讨论:邻接表与邻接矩阵有什么异同之处?,【联系】邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。【区别】对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。邻接矩阵的空间复杂度为O(n2),而邻接表的空间复杂度为O(n+e)。【用途】邻接矩阵多用于稠密图的存储(e接近n(n-1)/2);而邻接表多用于稀疏图的存储(en2),选择题 1.在一个图中,所有顶点的度数之和等于所有边数的()倍。(A)1/2(B)1(C)2(D)4 2.在一个有向图中,所有顶点的入度之和
15、等于所有顶点的出度之和的()倍。(A)1/2(B)1(C)2(D)4 3.一个有 n 个顶点的无向图最多有()条边。(A)n(B)n(n-1)(C)n(n-1)/2(D)2n 4.具有 4 个顶点的无向完全图有()条边。(A)6(B)12(C)16(D)20 5.具有 6 个顶点的无向图至少应有()条边才能确保是一个连通图。(A)5(B)6(C)7(D)86.在一个具有 n 个顶点的无向图中,要连通全部顶点至少需要()条边。(A)n(B)n+1(C)n 1(D)n/2,对于一个具有 n 个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小 为()。(A)n(B)(n-1)2(C)n-1(D)n2
16、 对于一个具有 n 个顶点和 e 条边的无向图,若采用邻接表表示,则表头数 组的大小为(),所有邻接表中的结点总数是()。(A)n(B)n+1(C)n-1(D)n+e(A)e/2(B)e(C)2e(D)n+e 图的深度优先遍历算法类似于树的()。(A)先根遍历(B)后根遍历(C)按层遍历图的广度优先遍历算法类似于树的()。(A)先根遍历(B)后根遍历(C)按层遍历,一、深度优先搜索二、广度优先搜索,7.3 图的遍历,遍历定义:从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。,遍历实质:找每个顶点的邻接点的过程。图的特点:图
17、中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。,解决思路:可设置一个辅助数组 visited n,用来标记每个被访问过的顶点。它的初始状态为0,在图的遍历过程中,一旦某一个顶点i 被访问,就立即改 visited i为1,防止它被多次访问。,图常用的遍历:,怎样避免重复访问?,7.3.1 深度优先遍历(DFS)(类似树的先根遍历),方法:1、访问指定的起始顶点;2、若当前访问的顶点的邻接顶点有未被访问的,则任选 一个访问之;反之,退回到最近访问过的顶点;直到 与起始顶点相通的全部顶点都访问完毕;3、若此时图中尚有顶点未被访问,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 广义
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5463615.html