十字链表 (Orthogonal List) 

对于有向图来说,邻接表是有缺陆的。关心了出度问题,想了解入度就必须要遍历整个图才能知道。反之,逆邻接表解决了入度却不了解出度的情况。

顶点表结构:

其中 firstin 表示入边表头指针,指向该顶点的入边表中第一个结点, ftrstout 表示出边表头指针,指向该顶点的出边表中的第一个结点。

边表结点结构:

其中 tailvex 是指弧起点在顶点表的下标, headvex 是指弧终点在顶点表中的下标, headlink 是指入边表指针域,指向终点相同的下一条边, 饭taillink是

指边表指针域,指向起点相同的下一条边。如果是网,还可以再增加一个 weight 域来存储权值。

顶点依然是存入一个一维数组,以顶点 Vo 来说,firstout 指向的是出边表中的第一个结点V3。所以 Vo 边表结点的 headvex=3 ,而 tailvex 其实就是当前顶

点V0的下标0 ,由于 Vo 只有一个出边顶点,所以 headlink 和 taillink 都是空。

虚线箭头其实就是此图的逆邻接表的表示。对于Vo 来说,它有两个顶点V1和V2的入边。因此 Vo 的 firstin 指向顶点 V1 的边表结点中headvex 为 0 的结点,

如图中的①。接着由入边结点的 headlink 指向下一个入边顶点V2,如图中的②。对于顶点 V1,它有一个入边顶点V2,所以它的firstin指向顶点 V2 的边表

结点中 headvex 为 1 的结点,如图中的③。顶点 V2 和 V3 也是同样有一个入边顶点,如图中④和⑤。

十字链表的好处就是因为把邻接表和逆邻接表整合在了一起,这样既容易找到以Vi为尾的弧,也容易找到以Vi为头的弧,因而容易求得顶点的出度和入度。

创建图算法的时间复杂度是和邻接表相同的。

邻接多重表

ivex和jvex是与某条边依附的两个顶点在顶点表中的下标。ilink指向依附顶点ivex的下一条边,jlink指向依附顶点jvex的下一条边。

首先连线的①②③④就是将顶点的firstedge指向一条边,顶点下标要与ivex的值相同。接着,由于顶点Vo 的(V0,V1)边的邻边

有(V0,V3)和(V0,V2) 。因此⑤⑥的连线就是满足指向下一条依附于顶点V0的边的目标,注意ilink指向的结点的 jvex 一定要和它本身

的 ivex 的值相同。同样的道理,连线⑦就是指 (V1,V0) 这条边,它是相当于顶点 V1 指向 (V1,V2) 边后的下一条。V2 有三条边

依附,所以在③之后就有了⑧⑨ 。连线⑩的就是顶点V3 在连线④之后的下一条边。坐图一共有5条边,所以右图有10条连线。

边集数组

边集数组是由两个一维数组构成。一个是存储顶点的信息;另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标 (begin) 、

终点下标 (end) 和权(weight) 组成。适合对边依次进行处理的操作。

(参考《大话数据结构》)

转载于:https://www.cnblogs.com/wuyt/p/9551686.html

图的存储结构之十字链表、邻接多重表、边集数组相关推荐

  1. 数据结构之图的存储结构:十字链表法

    图的存储结构:十字链表法 思维导图: 产生条件: 十字链表法的定义: 十字链表法的代码定义: 性能分析: 思维导图: 产生条件: 当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大 当用邻接表法存 ...

  2. 图的存储结构(邻接矩阵和邻接表)

    图的存储结构(邻接矩阵和邻接表) 前言: 前面我们学习图的有些定义和术语,对图这个数据结构有了新的见解和认知,让我们理解图结构的知识,今天我们学习图的存储结构,图的存储结构比较多,我们今天主要是学习邻 ...

  3. (王道408考研数据结构)第六章图-第二节1:图的存储结构(邻接矩阵、邻接表、十字链表和邻接多重表)

    文章目录 一:邻接矩阵--适合存储稠密图 (1)邻接矩阵定义 (2)代码 二:邻接表 (1)邻接表定义 (2)代码 (3)邻接表和邻接矩阵对比 三:十字链表(用于有向图) 四:邻接多重表(用于优化无向 ...

  4. 【数据结构】图的存储结构(邻接矩阵、邻接表、十字链表、邻接多重表)及实现(C语言)

    目录 1. 邻接矩阵表示法 1.1 图的邻接矩阵 1.2 创建有向网的邻接矩阵 2. 邻接表表示法 2.1 图的邻接表存储结构 2.2 创建有向图的邻接表 3. 十字链表表示法 3.1 图的十字链表存 ...

  5. 图——图的存储结构(邻接矩阵和邻接表法)

    图的五种存储结构: 1.图的邻接矩阵表示法 图是由顶点和边或弧两部分组成.图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组表示图,一个一维数组存储图中的顶点信息,一个二维数组(邻接 ...

  6. 图的存储结构:邻接矩阵与邻接表(稠密图与稀疏图)

    稠密图用 邻接矩阵存储 稀疏图用 邻接表存储 原因: 邻接表只存储非零节点,而邻接矩阵则要把所有的节点信息(非零节点与零节点)都存储下来. 稀疏图的非零节点不多,所以选用邻接表效率高,如果选用邻接矩阵 ...

  7. 图的链式存储结构解析(邻接表、逆邻接表、十字链表、邻接多重表)

    图的矩阵表示法比较消耗空间,需要花费$ n 2 n^2 n2$个单元存储边(弧).在边数较少的情况下比较浪费.我们这里来讨论图的链式存储结构. 图的链式结构主要有四类:邻接表.逆邻接表.十字链表.邻接 ...

  8. 构建复杂网络的几种方法(邻接矩阵,邻接表,十字链表,邻接多重表)

    目录 1. 数据结构 线性结构 非线性结构 2. 复杂网络的数组表示 3. 复杂网络的邻接表表示 4. 邻接矩阵与邻接表的比较 5. 复杂网络的其他表示方法 逆邻接表 十字链表 邻接多重表 前向星 链 ...

  9. 图——基本的图算法(一)图的存储结构

    图--基本的图算法(一)图的存储结构 1. 图的存储结构概述 对于图G=(V, E)来说,可以有两种标准的表示方法,一个是邻接矩阵,另一个是邻接链表,这两种方法都可以表示有向图和无向图.除此之外,图的 ...

  10. 数据结构之图的存储结构:邻接矩阵法

    图的存储结构:邻接矩阵法 邻接矩阵法: 邻接矩阵的定义: 邻接矩阵存储无向图: 邻接矩阵存储有向图: 邻接矩阵存储网: 邻接矩阵法的性质: 邻接矩阵法的代码实现: 矩阵运算A的n次幂的含义: 性能分析 ...

最新文章

  1. numpy.argwhere 返回的为索引值的array
  2. java使用strlen_java – “strlen(s1) – strlen(s2)”永远不会小于零
  3. PEP8 Python 编码规范整理
  4. 50道mysql笔试题目及答案_50道SQL练习题及答案与详细分析!!!
  5. ZBarSDK扫描二维码
  6. Oracle Sql 语法收集.
  7. AI评委引热议,阿里巴巴表示:AI不会取代工程师
  8. Database工作笔记-对层次库的理解
  9. Diino - 具有自动数据备份功能的国外2G免费网络硬盘
  10. 引入SpringBoot Jpa依赖后,项目出现警告
  11. 网上答题及其自动评测系统
  12. 第一次创业失败的总结 - 产品设计
  13. XRD测试常见问题及解答(三)
  14. SpringBoot31 整合SpringJDBC、整合MyBatis、利用AOP实现多数据源
  15. matlab怎么绘制零极点,matlab中画系统零极点的方法
  16. 小于等于、 大于等于Mybatis 、oracle
  17. 【年入百万】我用真人真事谈谈用脑子赚钱
  18. 键盘 Fn 键 的锁定与解锁
  19. 如何在cmd命令行窗口打开QQ
  20. dvwa详解_DVWA(六):XSS-Reflected 反射型XSS全等级详解

热门文章

  1. 原创:如何统计并过滤行中单元格有颜色的值
  2. c/c++学习系列之memset()函数
  3. 如何配置 Windows XP SP2 中的 Internet Explorer 增强安全功能
  4. 【Git/Github学习笔记】Git起步
  5. 基于留一法的快速KNN代码
  6. python中的深拷贝和浅拷贝
  7. eCognition易康domain is empty原因
  8. PHP实现Trie树(字典树)
  9. java数组验证哥德巴赫猜想_验证哥德巴赫猜想的JAVA代码
  10. Volley源码解析(一)