图的五种存储结构
图的邻接矩阵(Adjacency Matrix): 图的邻接矩阵用两个数组来表示图。一个一维数组存储图中顶点信息,另一个二维数组(一般称之为邻接矩阵)来存储图中的边或者弧的信息。从邻接矩阵中我们自然知道一个顶点的度(对于无向图)或者有向图中一个顶点的入度出度信息。
假设图G有n个顶点,则邻接矩阵是一个n*n的方阵。
1.对于如果图上的每条边不带权值来说,那么我们就用真(一般为1)和假(一般为0)来表示一个顶点到另一个顶点存不存在边。下面是一个图的邻接矩阵的定义:
邻接矩阵法实现带权值的无向图的创建如下:
按照如图输入各边(不重复)
测试程序如下:
结果可得该矩阵,证明创建树成功。 假设n个顶点e条边的创建,createGraph算法的时间复杂度为O(n+n*n+e)。如果需要创建一个有向图,那么和上面一样一个一个录入边下标和权值。
邻接矩阵这种存储结构的优缺点: 缺点是对于边数相对顶点较少的稀疏图来说会存在极大的空间浪费。假设有n个顶点,优点是对于有向完全图和无向完全图来说邻接矩阵是一种不错的存储结构,浪费的话也只浪费了n个顶点的容量。
在树的存储结构一节中我们提到对于孩子表示法的第三种:用一段连续的存储单元(数组)存储树中的所有结点,利用一个单链表来存储数组中每个结点的孩子的信息。对于图的存储结构来说,我们也可以利用这种方法实现图的存储
邻接表(Adjacency List): 这种数组与链表相结合的存储方法叫做邻接表。1.为什么不也用单链表存储图的结点信息呢?原因就是数组这种顺序存储结构读取结点信息速率快。对于顶点数组中,每个数据元素还需要存储一个指向第一个邻接顶点的指针,这样才可以查找边的信息2.图中每个顶点Vi(i > 0)的所有邻接点构成一个线性表 (在无向图中这个线性表称为Vi的边表,有向图中称为顶点作为弧尾的出边表) ,由于邻接点的不确定性,所以用链表存储,有多少个邻接点就malloc一个空间存储邻接点,这样更不会造成空间的浪费(与邻接矩阵相比来说)。3.对于邻接表中的某个顶点来说,用户关心的是这个顶点的邻接点,完全可以遍历用单链表设计成的边表或者出边表得到,所以没必要设计成双链表。
邻接表的存储结构:
假设现在有一无向图G,如下图:
从邻接表结构中,知道一个顶点的度或者判断两个顶点之间是否存在边或者求一个顶点的所有邻接顶点是很容易的。
假设现在有一有向图G,如下图:
无向图的邻接表创建示例如下:
假设在上图(无向图)中的V0V1V2V3顶点值为ABCD,则依据下面测试程序可得结果:
邻接表的优缺点: 优点是:邻接表存储图,既能够知道一个顶点的度和顶点的邻接结点的信息,并且更不会造成空间的浪费。缺点是邻接表存储有向图时,如果关心的是顶点的出度问题自然用邻接表结构,但是想了解入度需要遍历图才知道(需要考虑逆邻接表)。
十字链表(Orthogonal List) :有向图的一种存储方法,它把邻接表和逆邻接表结合起来,因此在十字链表结构中可以知道一个顶点的入度和出度情况。
重新定义顶点表的结点如下图:
现在有一有向图如下图:
则它的存储结构示意图为:
其定义如下:
十字链表是用来存储有向图的,这样可以看出一个顶点的出入度信息。对于无向图来说完全没必要用十字链表来存储。
在无向图中,因为我们关注的是顶点的信息,在考虑节约空间的情况下我们利用邻接表来存储无向图。但是如果我们关注的是边的信息,例如需要删除某条边对于邻接表来说是挺繁琐的。它需要操作两个单链表删除两个结点。因此我们仿照十字链表的方式对边表结点结构重新定义如下图:
它的邻接多重表结构为:
多重邻接表的优点:对于边的操作相比于邻接表来说更加方便。比如说我们现在需要删除(V0,V2)这条边,只需将69步骤中的指针改为nullptr即可。
边集数组(edgeset array): 边集数组是由两个数组组成,一个存储顶点信息,另一个存储边的信息,这个边数组中的每个数据元素由起点下标,终点下标,和权组成(如果边上含有权值的话)。
边数组结构如下图:
边集数组实现图的存储的优缺点:优点是对于边的操作方便快捷,操作的只是数组元素。比如说删除某条边,只需要删除一个数组元素。缺点是:对于图的顶点信息,我们只有遍历整个边数组才知道,这个费时。因此对于关注边的操作来说,边集数组更加方便。
存储器可分为哪三类
三、按读写功能划分 1. 只读存储器(ROM):存储的内容是固定不变的,只能读出而不能写入的半导体存储器。2. 随机读写存储器(RAM):既能读出又能写入的存储器。四、按信息保存性划分 1. 非永久记忆的存储器:断电后信息即消失的存储器。2. 永久记忆性存储器:断电后仍能保存信息的存储器。五、按...
逻辑结构有哪些?
(2)存储结构:链式存储,顺序存储 问题五:什么是文件的逻辑结构?它有哪几种组织方式 文件的逻辑结构是用户可见结构。逻辑文件从结构上分成二种形式:一种是无结构的流式文件,是指对文件内信息不再划分单位,它是依次的一串字符流构成的文件。一种是有结构的记录式文件, 是用户把文件内的信息按...
冯诺依曼结构由哪五个部分组成?
冯诺依曼计算机体系结构主要由五大部件组成:1、存储器用来存放数据和程序;2、运算器主要运行算数运算和逻辑运算,并将中间结果暂存到运算器中;3、控制器主要用来控制和指挥程序和数据的输入运行,以及处理运算结果;4、输入设备用来将人们熟悉的信息形式转换为机器能够识别的信息形式,常见的有键盘,鼠标等...
计算机硬件的基本组成是什么?
1、运算器:算术运算和逻辑运行的实际执行部件。2、控制器:统一指挥和控制计算机各部件按时序协调操作的部件。3、内部存储器按其存储信息的方式可以分为只读存储器ROM(Read Only Memory)、随机存储器RAM(Random Access Memory)和高速缓冲存储器Cache。4、输入设备:键盘、鼠标、扫描仪、光笔。5、输出设备...
五种大数据处理架构
五种大数据处理架构大数据是收集、整理、处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称。虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性、规模,以及价值在最近几年才经历了大规模扩展。本文将介绍大数据系统一个最基本的组件:处理框架。处理框架负责对系统中的数...
数据库管理系统结构由哪五部分构成,分别是什么,并阐述?
DBA的具体职责包括:具体数据库中的信息内容和结构,决定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能。其中应用程序包含在软件范围内,是指数据库应用系统,比如开发工具、人才管理系统、信息...
电子计算机主存内的ROM是指
其不能改变其内的数据、只能读出数据,不能写入数据、通常用来存储系统程序。ROM所存数据稳定 ,断电后所存数据也不会改变,并且结构较简单,使用方便,因而常用于存储各种固定程序和数据。ROM有多种类型,且每种只读存储器都有各自的特性和适用范围。从其制造工艺和功能上分,ROM有五种类型,即掩膜编程...
数据的存储结构是
非顺序存储的特点是:借助指针来表示数据之间的逻辑关系。问题三:数据的存储结构又被称为什么 数据的储存结构又叫物理结构 问题四:数据的储存结构有哪几种? 存储结构:顺序存储结构和链式存储结构 数据结构:线性,树状,图 问题五:数据的存储结构到底是四种还是两种 一般而言,主要的是四种:顺序...
数据结构面试题整理学生收藏
面试真题数据结构面试题整理题目+答案 一、什么是数据结构? 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。结构包括逻辑结构和物理结构。 数据的逻辑结构包括4种 (1)集合:数据元素之间除了有相同的数据类型再没有其他的关系 (2)线性结构:数据元素之间是一对一...
冯诺依曼结构计算机的五大基本构件
1、中央处理器:冯诺依曼结构计算机的核心部件,它负责执行计算机程序的指令。中央处理器由控制单元和算术逻辑单元组成,控制单元负责指令的解码和执行,算术逻辑单元负责数据的运算和逻辑判断。2、存储器:计算机中用于存储程序和数据的设备,它是冯诺依曼结构计算机的重要组成部分。存储器分为主存储器和辅助...
汲饱拉米: 索引结构和hash结构
雁江区19261107712: 图的存储结构有多少种?
汲饱拉米: 主要的吧: 邻接矩阵、邻接表 无向图的邻接多重表 有向图的十字链表
雁江区19261107712: 图的两种存储结构是什么 - ?
汲饱拉米: 二楼说错了,方向有误.这两个分别叫剖面符号和断面符号,他们剖段的方向都是纵向的,观察的方向是指向数字的方向,从网页上来看,就是L1是从左往右,而1┃则表示从右往左看.这两种符号的区别是断面图与剖面图的区别在于:断面图只画形体被剖开后断面的投影,而剖面图要画出形体被剖开后整个余下部分的投影如图. 1)剖面图是形体剖切之后剩下部分的投影,是体的投影.断面图是形体剖切之后断面的投影,是面的投影. 剖面图中包含断面图. 2)剖面图用剖切位置线、投射方向线和编号来表示.断面图则只画剖切位置线与编号,用编号的注写位置来代表投射方向. 3)剖面图可用两个或两个以上的剖切平面进行剖切,断面图的剖切平面通常只能是单一的.
雁江区19261107712: 8. 邻接表是图的一种( ). A. 顺序存储结构 B. 链式存储结构 C. 索引存储结构 D. 散列存储结构8. 邻接表是图的一种( ).A. 顺序存储结构 B.链式存储结构 C. ... - ?
汲饱拉米:[答案] B.链式存储结构 这个是它的定义里面的.
雁江区19261107712: 图的存储结构——所存储的信息有哪些? - ?
汲饱拉米: 一、邻接矩阵存储方法 邻接矩阵是表示顶点之间相邻关系的矩阵. 设G=(V,E)是具有n(n>0)个顶点的图,顶点的顺序依次为0~n-1,则G的邻62616964757a686964616fe4b893e5b19e31333431376533接矩阵A是n阶方阵,其定义如下: (1)如...