- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 图 第6章 图 6.1 图的基本概念 6.2 图的存储结构 6.3 图的遍历 6.4 最短距离问题 6.1 图的基本概念 在日常生活中,常用图来表示一些问题或概念,如IC设计、城市间交通道路规划、作业调度等。图和树一样,也是一种非线性数据结构。图和树的最大差异在于:树描述的是数据元素(结点)之间的层次关系,每一层上的数据元素可能和下一层中多个元素(即孩子结点)相关,但只能和上一层中一个元素相关,而图结构研究两顶点之间是否相连的关系,在图中,结点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。图结构提供了简单的方式来描述一个问题、系统或状况等。 图:如果数据元素集合D中的个数据元素之间存在任意的前后件关系,则此数据结构称为图。图通常用G表示。 无向图:如果对于图中的任意两个结点a与b,当结点a是结点b的前件(既结点b是结点a的后件)时,结点b 也是结点a的前件(既结点a 是结点b的后件),则称该图为无向图。 有向图:如果对于图中的任意两个结点a与b,当结点a是结点b的前件(既结点b是结点a的后件)时,结点b 不都是结点a的前件(既结点a不都是结点b的后件),则称该图为有向图。 无向完全图:在具有n个结点的无向图中,边的最大数目为n(n-1)/2。边数达到最大值的无向图称为无向完全图。 出度:在图中,一个结点的后件个数称为该结点的出度。 入度:在图中,一个结点的前件个数称为该结点的入度。 度:一个结点的入度与出度之和称为该结点的度。对于无向图来说,其中每一个结点的入度等于该结点的出度。 图的度:图中结点的最大度称为图的度。 有值图:如果图中的任意两个结点a与b之间规定了一个值 f(a,b),则称为有值图。 路径长度:图中两个结点之间的路径上所经过的边数。 最短路径:图中两个结点之间路径长度最短的那条路径称为这两个结点的最短路径。 最短路径长度或最短距离:最短路径所对应的路径长度。 6.2 图的存储结构 6.2.1 关联矩阵 6.2.2 求值矩阵 6.2.3 邻接表 6.2.4 邻接多重表 图的结构比较复杂,图中任意两个结点之间都可能存在联系,无法用数据结构元素在存储空间中的物理位置来表示各数据元素之间的前后件关系。另外图中各结点的度各不相同,其中最大度数与最小度数可能相差很大,用多重链表作为图的存储结构也不时很方便,所以,在实际应用中,是根据对图的具体运算来选取合适的存储结构。 6.2.1 关联矩阵 假设图中共有n个结点,其结点值分别为d1、d2….dn,并用自然数将它们依此编号为1,2….,n。 用长度为n的一维数组D(1:n)存放图中各数据结点的信息, n阶的二维数组R(1:n,1:n)存放图中各结点的关联信 息。其中二维数组R称为图的关联矩阵。在关联矩阵R中,每一个元素R(i,j) (1≤i≤n,1≤j≤n)的定义为 6.2.2 求值矩阵 关联矩阵只表示了图的结构,既图中各结点的后件关系。而在许多实际问题中,还需要对两个关联结点之间的值进行运算。所以除了要存储图中各结点值以及各结点之间的关系外,还必须存储图中每两个结点之间的求值函数。 假设有值图有n个结点,则求值矩阵是一个n阶矩阵,其中第i行、第j列的元素V(i,j)表示有值图中第i个结点到第j个结点之间的求值函数f(di,dj)。当第i个结点到第j个结点不存在边时,可置V(i,j)为-1。 6.2.3 邻接表 邻接表这种存储结构也称为“顺序-索引-链接”存储结构)。 首先,用一个顺序存储空间来存储图中各结点的信息。该顺序存储空间中的每一个存储结点有两个域:数据域data和指针域link。 其次,对于图中每一个结点dk构造一个单链表。该单链表的头指针即为顺序空间中的对应存储结点的指针域。 Num域用于存放图中某个结点的编号; val域用于存放编号为num结点的前件到mun结点之间的求值函数值f,如果不是有值图,则val域可以不要; next域用于指向与num结点是同一个前件的另一个后件信息的结点。 所以,在图的邻接表表示中,图中某个结点的所有后件被链接成一个单链表,并且,该单链表被链接在顺序存储空间中该结点的link域上。 struct node /*单链表中结点结构*/ { int num;/*图中结点编号*/ ET1 val;/*求值函数*/ struct node *next;/*指针域*/ }; struct gpnode /*顺序存储空间中结点结构*/ { E
文档评论(0)