邻接矩阵、邻接表存储有向图

十字链表存储有向图

十字链表是有向图的一种链式存储结构。在十字链表中,对应于有向图中的每条弧有一个结点,对应于每个顶点也有一个结点。

弧结点中有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. 构建复杂网络的几种方法(邻接矩阵,邻接表,十字链表,邻接多重表)

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

  2. 7.2图的存储结构(十字链表、邻接多重表、边集数组)

    思路: 有没有可能把邻接表和逆邻接表结合起来. 所以就产生了十字链表(Orthogonal List) 为此我们重新定义顶点表结点结构: data firstIn firstOut firstIn:第 ...

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

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

  4. 十字链表与邻接多重表的画法

    文章目录 前言 一.十字链表 1.画邻接表 2.增加弧节点的域 3.自己指向自己 二.邻接多重表 1.画顶点 2.画边 3.自己指向自己 前言 近期一直在构建算法技能树的数据,借此机会,重新把数据结构 ...

  5. 图的存储__十字链表法和邻接多重表法

    文章目录 一.十字链表法 概念 性能分析: 二.邻接多重表法 概念 复杂度分析 总结 一.十字链表法 概念 1.十字链表法只能存储有向图. 2.每个表中有一个顶点数组,每个顶点用两个指针,其中橙色指针 ...

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

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

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

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

  8. 用邻接表存储图c语言,邻接表、邻接多重表、十字链表及C语言实现

    上一节介绍了如何使用顺序存储结构存储邻接多重表和 邻接的意思是顶点之间有边或者弧存在,通过当前顶点,可以直接找到下一个顶点. 邻接表 使用邻接表存储图时,对于图中的每一个顶点和它相关的邻接点,都存储到 ...

  9. 数据结构之图(2-2)【邻接多重表】适用于无向图

    邻接多重表(Adjacency Multilist)主要用于存储无向图.因为,如果用邻接表存储无向图,每条边的两个边结点分别在以该边 所依附的两个顶点为头结点的链表中,这给图的某些操作带来不便.例如, ...

最新文章

  1. 阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,基于数据库Greenplum的开源版本,并且吸收PostgreSQL精髓...
  2. HTML怎么把文字分栏_JS将HTML生成PDF并下载
  3. aspnetboilerplate .net core 使用原生sql
  4. VS2019正确创建C++步骤以及扩展插件美化你的VS2019的IDE开发环境
  5. How Many Pieces of Land ? (UVA-10213)
  6. Python实现各种进制转换问题,so easy
  7. 如何用libpng输出一个编辑后的png图片?
  8. 随想录(从开源的宝库中学习)
  9. MMP,我说每年年会我怎么老是中不了奖,原来是这样
  10. Android屏幕解锁和点亮
  11. 收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决
  12. 域控制器的常规卸载,Active Directory系列之十三
  13. Zookeeper学习笔记——1 单机版本环境搭建
  14. 无法解析com.oracle:ojdbc14:XXXXX问题解决方案
  15. 《疯狂Python讲义》数字转人民币大写完整代码
  16. spark scala求PV,UV,topN
  17. java中jdk1.8的hashmap为啥要用尾插法,不用头插入。
  18. python时间序列分析航空旅人_大佬整理的Python数据可视化时间序列案例,建议收藏(附代码)...
  19. 链接生成二维码( QRCode )
  20. SCSS 中这些实用技巧,你可能还不知道!

热门文章

  1. 对php的感受100字_这首由半个古风圈歌手演唱的王者荣耀100英雄群像歌,燃炸了...
  2. 前端跨域问题解决方案
  3. SCOvs. IBM 最新判决出炉,SCO再败
  4. 【BZOJ5249】【九省联考2018】—IIIDX(线段树)
  5. 【codevs1034】家园——网络流
  6. 简单选项卡切换(一)
  7. chain.doFilter(request,response)含义
  8. Uber CEO博鳌论坛采访:看好中国市场共享经济的发展模式
  9. MSSQL获取指定日期的SQL语句
  10. μC/OS-II实时性能测试与分析