十字链表、邻接多重表
邻接矩阵、邻接表存储有向图
十字链表存储有向图
十字链表是有向图的一种链式存储结构。在十字链表中,对应于有向图中的每条弧有一个结点,对应于每个顶点也有一个结点。
弧结点中有5个域:尾域(tailvex)和头域(headvex)分别指示弧尾和弧头这两个顶点在图中的位置;链域hlink指向弧头相同的下一条弧;链域tlink指向弧尾相同的下一条弧;info域指向该弧的相关信息。这样,弧头相同的弧就在同一链表上,弧尾相同的弧也在同一个链表上。
顶点结点中有3个域:data域存放顶点相关的数据信息,如顶点名称;firstin和firstout两个域分别指向以该顶点为弧头或弧尾的第一个弧结点。
十字链表法性能分析
在十字链表中,既容易找到vi为尾的弧,又容易找到vi为头的弧,因而容易求得顶点的出度和入度。
图的十字链表表示是不唯一的,但一个十字链表表示确定一个图。
//十字链表存储结构
#define MaxVertexNum 100 //图中顶点数目的最大值
typedef struct ArcNode{ //边表结点int tailvex, headvex; //该弧的头尾结点struct ArcNode *hlink, *tlink; //分别指向弧头相同和弧尾相同的结点//InfoType info; //相关信息指针
}ArcNode;typedef struct VNode{ //顶点表结点VertexType data; //顶点信息ArcNode *firstin, *firstout; //指向第一条入弧和出弧
}VNode;typedef struct{VNode xlist[MaxVertexNum]; //邻接表int vexnum, arcnum; //图的顶点数和弧数
}GLGraph; //GLGraph是以十字邻接存储的图类型
邻接矩阵、邻接表存储无向图
邻接多重表存储无向图
邻接多重表是无向图的另一种链式存储结构。
在邻接表中,容易求得顶点和边的各种信息,但在邻接表中求两个顶点之间是否存在边而对边执行删除等操作时,需要分别在两个顶点的边表中遍历,效率较低。
在邻接多重表中,每条边用一个结点表示。
其中,mark为标志域,可用以标记该条边是否被搜素过;ivex 和 jvex为该边依附的两个顶点在图中的位置;ilink指向下一条依附于顶点ivex的边;jlink指向下一条依附于顶点jvex的边,info为指向和边相关的各种信息的指针域。
每个顶点也用一个结点表示
其中,data域存储该顶点的相关信息,firstedge域指示第一条依附于该顶点的边。
在邻接多重表中,所有依附于同一顶点的边串联在同一链表中,由于每条边依附于两个顶点,因此每个边结点同时链接在两个链表中。
注意,每条边只有一个结点。
#define MaxVertexNum 100 //图中顶点数目的最大值
typedef struct ArcNode{ //边表结点bool mark; //访问标记int ivex, jvex; //分别指向该弧的两个结点struct ArcNode *ilink, *jlink; //分别指向两个顶点的下一条边//InfoType info; //相关信息指针
}ArcNode;typedef struct VNode{ //顶点表指针VertexType data; //顶点信息ArcNode *firstedge; //指向第一条依附该顶点的边
}VNode;typedef struct{VNode adjmulist[MaxVertexNum]; //邻接表int vexnum, arcnum; //图的顶点数和弧数
}AMLGraph; //AMLGraph是以邻接多重表存储的图类型
十字链表、邻接多重表相关推荐
- 构建复杂网络的几种方法(邻接矩阵,邻接表,十字链表,邻接多重表)
目录 1. 数据结构 线性结构 非线性结构 2. 复杂网络的数组表示 3. 复杂网络的邻接表表示 4. 邻接矩阵与邻接表的比较 5. 复杂网络的其他表示方法 逆邻接表 十字链表 邻接多重表 前向星 链 ...
- 7.2图的存储结构(十字链表、邻接多重表、边集数组)
思路: 有没有可能把邻接表和逆邻接表结合起来. 所以就产生了十字链表(Orthogonal List) 为此我们重新定义顶点表结点结构: data firstIn firstOut firstIn:第 ...
- (王道408考研数据结构)第六章图-第二节1:图的存储结构(邻接矩阵、邻接表、十字链表和邻接多重表)
文章目录 一:邻接矩阵--适合存储稠密图 (1)邻接矩阵定义 (2)代码 二:邻接表 (1)邻接表定义 (2)代码 (3)邻接表和邻接矩阵对比 三:十字链表(用于有向图) 四:邻接多重表(用于优化无向 ...
- 十字链表与邻接多重表的画法
文章目录 前言 一.十字链表 1.画邻接表 2.增加弧节点的域 3.自己指向自己 二.邻接多重表 1.画顶点 2.画边 3.自己指向自己 前言 近期一直在构建算法技能树的数据,借此机会,重新把数据结构 ...
- 图的存储__十字链表法和邻接多重表法
文章目录 一.十字链表法 概念 性能分析: 二.邻接多重表法 概念 复杂度分析 总结 一.十字链表法 概念 1.十字链表法只能存储有向图. 2.每个表中有一个顶点数组,每个顶点用两个指针,其中橙色指针 ...
- 【数据结构】图的存储结构(邻接矩阵、邻接表、十字链表、邻接多重表)及实现(C语言)
目录 1. 邻接矩阵表示法 1.1 图的邻接矩阵 1.2 创建有向网的邻接矩阵 2. 邻接表表示法 2.1 图的邻接表存储结构 2.2 创建有向图的邻接表 3. 十字链表表示法 3.1 图的十字链表存 ...
- 图的链式存储结构解析(邻接表、逆邻接表、十字链表、邻接多重表)
图的矩阵表示法比较消耗空间,需要花费$ n 2 n^2 n2$个单元存储边(弧).在边数较少的情况下比较浪费.我们这里来讨论图的链式存储结构. 图的链式结构主要有四类:邻接表.逆邻接表.十字链表.邻接 ...
- 用邻接表存储图c语言,邻接表、邻接多重表、十字链表及C语言实现
上一节介绍了如何使用顺序存储结构存储邻接多重表和 邻接的意思是顶点之间有边或者弧存在,通过当前顶点,可以直接找到下一个顶点. 邻接表 使用邻接表存储图时,对于图中的每一个顶点和它相关的邻接点,都存储到 ...
- 数据结构之图(2-2)【邻接多重表】适用于无向图
邻接多重表(Adjacency Multilist)主要用于存储无向图.因为,如果用邻接表存储无向图,每条边的两个边结点分别在以该边 所依附的两个顶点为头结点的链表中,这给图的某些操作带来不便.例如, ...
最新文章
- 阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,基于数据库Greenplum的开源版本,并且吸收PostgreSQL精髓...
- HTML怎么把文字分栏_JS将HTML生成PDF并下载
- aspnetboilerplate .net core 使用原生sql
- VS2019正确创建C++步骤以及扩展插件美化你的VS2019的IDE开发环境
- How Many Pieces of Land ? (UVA-10213)
- Python实现各种进制转换问题,so easy
- 如何用libpng输出一个编辑后的png图片?
- 随想录(从开源的宝库中学习)
- MMP,我说每年年会我怎么老是中不了奖,原来是这样
- Android屏幕解锁和点亮
- 收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决
- 域控制器的常规卸载,Active Directory系列之十三
- Zookeeper学习笔记——1 单机版本环境搭建
- 无法解析com.oracle:ojdbc14:XXXXX问题解决方案
- 《疯狂Python讲义》数字转人民币大写完整代码
- spark scala求PV,UV,topN
- java中jdk1.8的hashmap为啥要用尾插法,不用头插入。
- python时间序列分析航空旅人_大佬整理的Python数据可视化时间序列案例,建议收藏(附代码)...
- 链接生成二维码( QRCode )
- SCSS 中这些实用技巧,你可能还不知道!
热门文章
- 对php的感受100字_这首由半个古风圈歌手演唱的王者荣耀100英雄群像歌,燃炸了...
- 前端跨域问题解决方案
- SCOvs. IBM 最新判决出炉,SCO再败
- 【BZOJ5249】【九省联考2018】—IIIDX(线段树)
- 【codevs1034】家园——网络流
- 简单选项卡切换(一)
- chain.doFilter(request,response)含义
- Uber CEO博鳌论坛采访:看好中国市场共享经济的发展模式
- MSSQL获取指定日期的SQL语句
- μC/OS-II实时性能测试与分析