图的存储结构之十字链表、邻接多重表、边集数组
十字链表 (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
图的存储结构之十字链表、邻接多重表、边集数组相关推荐
- 数据结构之图的存储结构:十字链表法
图的存储结构:十字链表法 思维导图: 产生条件: 十字链表法的定义: 十字链表法的代码定义: 性能分析: 思维导图: 产生条件: 当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大 当用邻接表法存 ...
- 图的存储结构(邻接矩阵和邻接表)
图的存储结构(邻接矩阵和邻接表) 前言: 前面我们学习图的有些定义和术语,对图这个数据结构有了新的见解和认知,让我们理解图结构的知识,今天我们学习图的存储结构,图的存储结构比较多,我们今天主要是学习邻 ...
- (王道408考研数据结构)第六章图-第二节1:图的存储结构(邻接矩阵、邻接表、十字链表和邻接多重表)
文章目录 一:邻接矩阵--适合存储稠密图 (1)邻接矩阵定义 (2)代码 二:邻接表 (1)邻接表定义 (2)代码 (3)邻接表和邻接矩阵对比 三:十字链表(用于有向图) 四:邻接多重表(用于优化无向 ...
- 【数据结构】图的存储结构(邻接矩阵、邻接表、十字链表、邻接多重表)及实现(C语言)
目录 1. 邻接矩阵表示法 1.1 图的邻接矩阵 1.2 创建有向网的邻接矩阵 2. 邻接表表示法 2.1 图的邻接表存储结构 2.2 创建有向图的邻接表 3. 十字链表表示法 3.1 图的十字链表存 ...
- 图——图的存储结构(邻接矩阵和邻接表法)
图的五种存储结构: 1.图的邻接矩阵表示法 图是由顶点和边或弧两部分组成.图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组表示图,一个一维数组存储图中的顶点信息,一个二维数组(邻接 ...
- 图的存储结构:邻接矩阵与邻接表(稠密图与稀疏图)
稠密图用 邻接矩阵存储 稀疏图用 邻接表存储 原因: 邻接表只存储非零节点,而邻接矩阵则要把所有的节点信息(非零节点与零节点)都存储下来. 稀疏图的非零节点不多,所以选用邻接表效率高,如果选用邻接矩阵 ...
- 图的链式存储结构解析(邻接表、逆邻接表、十字链表、邻接多重表)
图的矩阵表示法比较消耗空间,需要花费$ n 2 n^2 n2$个单元存储边(弧).在边数较少的情况下比较浪费.我们这里来讨论图的链式存储结构. 图的链式结构主要有四类:邻接表.逆邻接表.十字链表.邻接 ...
- 构建复杂网络的几种方法(邻接矩阵,邻接表,十字链表,邻接多重表)
目录 1. 数据结构 线性结构 非线性结构 2. 复杂网络的数组表示 3. 复杂网络的邻接表表示 4. 邻接矩阵与邻接表的比较 5. 复杂网络的其他表示方法 逆邻接表 十字链表 邻接多重表 前向星 链 ...
- 图——基本的图算法(一)图的存储结构
图--基本的图算法(一)图的存储结构 1. 图的存储结构概述 对于图G=(V, E)来说,可以有两种标准的表示方法,一个是邻接矩阵,另一个是邻接链表,这两种方法都可以表示有向图和无向图.除此之外,图的 ...
- 数据结构之图的存储结构:邻接矩阵法
图的存储结构:邻接矩阵法 邻接矩阵法: 邻接矩阵的定义: 邻接矩阵存储无向图: 邻接矩阵存储有向图: 邻接矩阵存储网: 邻接矩阵法的性质: 邻接矩阵法的代码实现: 矩阵运算A的n次幂的含义: 性能分析 ...
最新文章
- numpy.argwhere 返回的为索引值的array
- java使用strlen_java – “strlen(s1) – strlen(s2)”永远不会小于零
- PEP8 Python 编码规范整理
- 50道mysql笔试题目及答案_50道SQL练习题及答案与详细分析!!!
- ZBarSDK扫描二维码
- Oracle Sql 语法收集.
- AI评委引热议,阿里巴巴表示:AI不会取代工程师
- Database工作笔记-对层次库的理解
- Diino - 具有自动数据备份功能的国外2G免费网络硬盘
- 引入SpringBoot Jpa依赖后,项目出现警告
- 网上答题及其自动评测系统
- 第一次创业失败的总结 - 产品设计
- XRD测试常见问题及解答(三)
- SpringBoot31 整合SpringJDBC、整合MyBatis、利用AOP实现多数据源
- matlab怎么绘制零极点,matlab中画系统零极点的方法
- 小于等于、 大于等于Mybatis 、oracle
- 【年入百万】我用真人真事谈谈用脑子赚钱
- 键盘 Fn 键 的锁定与解锁
- 如何在cmd命令行窗口打开QQ
- dvwa详解_DVWA(六):XSS-Reflected 反射型XSS全等级详解