因为图的结构特点,使得其在存储、遍历也相对复杂一些。

邻接矩阵存储图

最简单的方式就是将图的顶点用一维数组存储进来,然后将边信息存储在二维矩阵中,这两个数组合称为图的邻接矩阵(Adjacency Matrix)。

无向图的邻接矩阵
有向图的邻接矩阵

邻接表存储图

看上图邻接矩阵的结构,可以得知邻接矩阵中的边数组中存在大量为零的空占位,浪费了大量空间,所以就自然而然想到利用链表来进行边的存储,这就是邻接表(Adjacency List)。

无向图的邻接表
有向图的邻接表

有向图邻接表的边表为以弧尾为链表表头进行存储的,这样对于顶点的出度统计较为方便,而有向图逆邻接表则正好与邻接表相反,边表是以弧尾作为链表表头的。

有向图逆邻接表边表
网的邻接表

邻接多重表存储无向图

假如对无向图的邻接表进行删除某边操作时需要对相关结点进行遍历找到相应边然后进行删除,比较麻烦,故邻接多重表对其进行改良。

边表结构:

其中,ivex和jvex为某边依附的两顶点在顶点表中的下标,ilink指向依附顶点ivex的下一条边,同理jlink指向依附顶点jvex的下一条边。

邻接多重表结构

十字链表存储有向图

用邻接表存储有向图存在一个问题,对于某一顶点的弧统计还是很麻烦的,邻接表对于顶点作为弧头的弧统计很麻烦,逆邻接表对于顶点作为弧尾的弧统计很麻烦。所以为了对顶点更好的查询,便参考线索二叉树的设计思路,得到了十字链表(Orthogonal List)。

顶点表的结构为:

边表结构为:

其中,tailvex为弧尾在顶点表中的下标,headvex为弧头在顶点表中的下标,headlink指的是入边表指针域,指的是弧头相同的下一条边,taillink指的是出边表指针域,指的是弧尾相同的下一边。

十字链表存储示意

图中实线为邻接表,虚线为逆邻接表。

边集数组存储图

注意和邻接矩阵进行区别。

假设以邻接矩阵作为图的存储结构_图的存储相关推荐

  1. 数组是逻辑结构还是存储结构_数据结构之存储方式

    数据结构的存储⽅式只有两种:数组(顺序存储)和链表(链式存储). 这句话怎么理解,不是还有散列表.栈.队列.堆.树.图等等各种数据结构吗? 我们分析问题,⼀定要有递归的思想,⾃顶向下,从抽象到具体.你 ...

  2. 假设以邻接矩阵作为图的存储结构_学习数据结构第五章:图(图的存储方法)...

    第五章:图(图的存储方法) 1.邻接矩阵法 下面是一个无向图的表示,我们使用一个一维数组存放点集,使用一个二维数组存放边集 二维数组表示边:行号表示其实端点,列号表示结束端点,值表示该边是否存在,以及 ...

  3. 数据结构——图:极大小连通子图、图的存储结构、图的遍历

    图的基本概念: 极大连通子图就是连通分量. 极大连通子图与连通分量在无向图(undirected graph)这个前提下是等同的概念. 极小连通子图: 减去任何一条边就不再连通. 不管树还是二叉树:n ...

  4. 广义表头尾链表存储结构_单向循环链表的存储结构和操作

    单向循环链表的存储结构 单向循环链表(Circular Linked List)是单向链表的一种扩充,当单向链表带有头结点时,把单向链表中尾结点的指针域由空指针改为头结点的指针(当单向链表不带头结点时 ...

  5. mysql 存储 结构,mysql目录与存储结构(一)

    mysql索引与存储结构(一) 首先从一个问题说起. 问题现象: 查询语句如下: -- sql1 SELECT w.wid, w.rid FROM warestock w JOIN product p ...

  6. 数据结构 二叉树的存储结构_线程二叉树| 数据结构

    数据结构 二叉树的存储结构 线程二叉树 (Threaded Binary Tree ) A binary tree can be represented by using array represen ...

  7. 线性表之链式存储结构_单链表相关算法

    在存储结构上,不需要连续的存储空间,需要上一个结点的指针域 指向下一个结点即可,找到一个结点就可以找到下一个结点. 学习教材是大话数据结构,加上自己的一些个人理解.这个算法 有点绕,需要对指针 相关内 ...

  8. pg数据库表存放在哪里_超详细的PG数据存储结构--逻辑结构和物理存储总结,值得收藏...

    概述 今天主要讲讲PG的数据结构,PG数据存储结构分为:逻辑结构和物理存储. 其中逻辑存储结构是内部的组织和管理数据的方式.物理存储结构是操作系统中组织和管理数据的方式.逻辑存储结构适用于不同的操作系 ...

  9. docker修改镜像的存储位置_云原生存储详解:容器存储与 K8s 存储卷(内含赠书福利)...

    作者 | 阚俊宝  阿里巴巴技术专家 参与文末留言互动,即有机会获得赠书福利! 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新 ...

最新文章

  1. apache不能能够解析php文件
  2. MSSQL编程笔记四 解决count distinct多个字段的方法
  3. 使用Decision Tree对MNIST数据集进行实验
  4. ABAP-读取应用服务器目录信息的函数代码摘抄
  5. java stream 原理
  6. java部署平台_开源Java自动化部署平台JDeploy
  7. 相邻数字+(正月点灯笼的动态规划2)(递归+DP)---JAVA
  8. MATLAB入门(三)
  9. Java集合的框架和实现类
  10. oauth2.0了解
  11. Atitit 标记语言ML(Markup Language) v6 目录 1. 标记语言ML Markup Language 1 1.1. 简介 1 2. 置标语言置标语言通常可以分为三类:标识性的
  12. Tomcat Get请求中文乱码
  13. 电动车的蓄电池与锂电池
  14. 【discuzX2】模板解析语法就template()函数分析
  15. Mysql 最全教程
  16. Coursera | 免费上Coursera-助学金申请流程
  17. thymeleaf中三元运算符嵌套写法
  18. php 计算字数,实现word一样的字数计算
  19. 启动项目报错404 Not Found nginx/1.21.5-2022-6-8
  20. centos7.4安装docker

热门文章

  1. linux 内存泄漏 定位,一种内存泄露检查和定位的方法
  2. 实例讲解getopt()函数的使用
  3. PWA(Progressive Web App)入门系列:(三)PWA关键技术Manifest
  4. C++ 高级数据类型(六)—— 自定义数据类型
  5. CRC32算法详细推导(3)
  6. Makefile中支持的函数大全
  7. PyRun_SimpleFile()崩溃问题
  8. 递归修改子目录及文件的权限
  9. 自定义控件-实现TextBox的禁止粘贴
  10. React开发(228):ant design table根据宽度自动忽略