今天开始准备学习一个新的数据结构---图,貌似听着挺复杂的,当然实际也不容易啦,所以先从理论上对图有个大概的认识,其实之前咱们学的二叉树就是一种特殊的图,怎么个特殊法呢?因为它没有环,但是图是可以,它没有祖先,子孙的关系,如下:

如果任意两个结点都有一条边,如下:

此时就叫"完成图"。

那如果有一个单向的关系,如下:

此时就叫"有向图"。

那如果有一个双向的关系,如下:

那此时就叫"双向有向图"

当然图在计算机中还有其它的很多特性待之后慢慢研究,试想一样这么复杂的一个数据结构,明显比二叉树要复杂,那如何去表达它呢?这里有两种方式来表达:邻接矩阵和邻接表,具体如下:

邻接矩阵:

何为邻接矩阵,先维基百科一下:

上图还是有些抽象,下面举一个例子来展示其形成矩阵的整个过程,咱们对这样的图进行研究:

可以画一个这样的矩阵:

好,下面再来一一根据图的关系来填充这个矩阵,如下:

至此所有关系都表示完,剩下木有填充的框里全部用0填充,最后矩阵如下:

这样就通过邻接矩阵将咱们的图表达出来了,但是~~明显这种表式法很浪费空间,咱们举例的结点比较少,要是有100万个结点而只有5000条边呢?那浪费的空间就可想而知了,这时邻接表就可以很好的解决这个空间的问题。

邻接表:

那如果用邻接表来表示同样的图,其实是由数组与链表相结合来表式的,具体表现如下:

然后以此类推,完整的表达图的邻接表如下:

很显然这种表式图的方法相对于邻接矩阵是比较省空间的,下面来算一下这两种表示方法空间复杂度,假如图有V个结点,E条边,对于邻接矩阵表达占用的空间为V^2,因为横向和纵向都是V;而如果是用邻接表表达占用的空间则为V+E,所以说这里从空间复杂度角度来看在选择用哪种方式去表达图的时候,如果发现边比较少结点比较多时用邻接表是比较合适的,如果边不是很稀疏的时候可以选择邻接矩阵。

转载于:https://www.cnblogs.com/webor2006/p/7866724.html

图的表达与遍历--邻接矩阵和邻接表相关推荐

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

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

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

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

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

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

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

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

  5. 【数据结构和算法笔记】:图的储存方式(邻接矩阵,邻接表)

    邻接矩阵: 顶点i,j之间有边,则A[i][j]=1或者边的权值, 否则等于0(不带权图)或者无穷(带权图) 例: 无向图的邻接矩阵: 例:有向图的邻接矩阵: 特点: 邻接表: 邻接表占用空间: 无向 ...

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

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

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

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

  8. 将图的广度优先遍历在邻接矩阵和邻接表存储结构上分别实现_图解:什么是“图”?

    从今天开始,我们开始介绍图的相关算法 什么是"图" 1.背景 作为图的开始,我们先来看一个经典的问题,它被认为是图论的起源. 这个问题是基于一个现实生活中的事例:河中心有两个小岛. ...

  9. 图的两种存储形式(邻接矩阵、邻接表)

    图可以使用两种存储结构,分别是邻接矩阵和邻接表. 注意:一个图所对应的邻接矩阵唯一,所对应的邻接表不唯一 一.邻接矩阵 邻接矩阵以矩阵的形式存储图所有顶点间的关系.邻接矩阵具有以下特点: 1.邻接矩阵 ...

最新文章

  1. WebApi系列~自主宿主HttpSelfHost的实现
  2. dev调试时无法进入下一步_【问题解决方案】Dev C++ 无法调试的问题与解决
  3. 泰森中国宣布与阿里云达成战略合作
  4. oracle ||#039; where #039;||condition;,帝国cms后台添加字段提示#039;Row size too large. The maximum row size...
  5. jQuery lazyload
  6. (补)20200105:整数转罗马数字
  7. java socket5源码_Java利用TCP协议实现客户端与服务器通信【附通信源码】
  8. 例解List<Map<String, Object>>存放的对象问题
  9. Flume的可扩展性
  10. JavaScript或MyEclipse—如何解决js文件导入到MyEclipse工程后出错?
  11. matlab能替代几何画板吗,比几何画板更强大的工具软件GeoGebra,数学老师值得拥有...
  12. iOS维码的生成和扫描
  13. 简单动画(过渡)与复杂动画
  14. 服务器集成显卡性能,主流显卡参数和性能对比
  15. ICLR 2021 | 自解释神经网络—Shapley Explanation Networks
  16. 杂志特稿:元宇宙将重塑我们的生活,我们要确保它变得更好
  17. 点对点网络带宽测试软件,iperf点对点网络性能测试工具
  18. J Infect (IF 38) | 韩国中央大学贾保磊等揭示人口腔微生物组中编码羊毛硫抗生素链球菌是肝脏疾病的潜在风险因子...
  19. latex 加减号堆积,放在一起
  20. vue的hook(钩子函数)

热门文章

  1. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1080:余数相同问题
  2. 排序算法 —— 插入排序
  3. 【Qt5.8】TypeError: Property 'asciify' of object Core问题解决办法
  4. 【Linux系统编程】I/O多路复用select、poll、epoll的区别使用
  5. sparkstreaming(1)——实战
  6. 最小栈—leetcode155
  7. 惯性传感器的卡尔曼滤波
  8. zzuli 2527: THE END IS COMING!!!!!(最小费用最大流)
  9. voip 音频采集时间_数字音频基础------从PCM说起
  10. linux字符处理工具 新手教程