全部科目 > 程序员 >
2020年下半年 上午试卷 综合知识
第 43 题
知识点    图的存储结构   存储结构  
章/节 常用数据结构  
 
 
以下关于存储结构的叙述中,正确的是( )。
 
  A.  有向图应采用邻接矩阵存储,无向图应采用邻接表存储
 
  B.  无向图应采用邻接矩阵存储,有向图应采用邻接表存储
 
  C.  稠密图适合采用邻接矩阵存储,稀疏图适合采用邻接表存储
 
  D.  稀疏图适合采用邻接矩阵存储,稠密图适合采用邻接表存储
 
 




 
 
相关试题      

  第43题    2014年上半年  
已知某带权图G的邻接表如下所示,其中表结点的结构为:

  第41题    2017年下半年  
对于下面的有向图,其邻接矩阵是一个(41)的矩阵,采用邻接链表存储时,顶点0的表结点个数为2,顶点3的表结点个数为0,顶点1的表结点个数为(42)。

  第43题    2012年上半年  
以下关于图的存储结构的叙述中,正确的是(43)

 
知识点讲解
· 图
· 图的存储结构
· 存储结构
 
        图
               图的基本概念
               图是重要的一类非线性结构,应用极为广泛,其形式化定义可写为:
               Graph=(V,R)
               其中,V={x|x∈datatype},R={VR}, VR={<x,y>|Px,y)∧(x,yV)}。
               在图中,数据元素常称为顶点,V是顶点的有穷集合;R是边(弧)的有穷集合。可见,从逻辑上看,图是由顶点和边组成,边反映出顶点之间的联系。
               图的存储结构
               图主要有以下4种存储结构:邻接矩阵、邻接表、邻接多重表及十字链表。其中最常用的存储结构为邻接矩阵和邻接表,尤其是邻接表。
               邻接矩阵是表示顶点之间相邻关系的矩阵。有n个顶点的图G=(V,E)的邻接矩阵为n阶方阵,其定义为:
               
               将邻接矩阵中的0、1换成权值,就是图的邻接矩阵。无向图的邻接矩阵是对称矩阵;顶点vi的度是邻接矩阵中第i行(或第i列)的元素1之和。有向图的邻接矩阵不一定是对称矩阵;顶点vi的出度是邻接矩阵中第i行元素之和,入度是邻接矩阵中第i列的元素之和。
               可见,通过邻接矩阵可以很容易地判定顶点间有无边(弧),容易计算顶点的度(出度、入度);缺点是所占空间只和顶点个数有关,和边数无关,在边数较少时,空间浪费较大。一般在顶点数较少且边数稠密时应用邻接矩阵。
               邻接表是为克服邻接矩阵在图为稀疏图时的空间浪费大这个缺点而提出的。
               邻接表是顶点的向量结构和边(弧)的单链表结构的集合,每个顶点节点包括两个域,将n个顶点放在一个向量中(称为顺序存储的节点表);一个顶点的所有邻接点链接成单链表,该顶点在向量中有一个指针域指向其第一个邻接点。邻接表的结构如下:
               顶点节点
               边(弧)节点
               其中,vexdata是顶点数据,firstarc是指向该顶点第一个邻接点的指针,adjvex是邻接点在向量中的下标,info是邻接点的信息,next是指向下一邻接点的指针。
               对无向图,容易求各顶点的度;边表中节点个数是边数的两倍。对有向图,容易求顶点的出度;若求顶点的入度则不容易,要遍历整个表。为了求顶点的入度,有时可设逆邻接表(指向某顶点的邻接点链接成单链表)。所谓逆邻接表就是对图中的每个顶点i建立一个单链表,把被i邻接的顶点放在一个链表中,即边表中存放的是入度边而不是出度边。一般在处理以顶点为主且为边稀疏时用邻接表。
               邻接多重表是为了解决邻接表不利于处理以边为主的情况,因为在邻接表中,每条边需要两个边节点,在以边为主处理图时,需判断此边是否处理过,增加了复杂性。图的邻接多重表中每个边只有一个节点,其节点结构如下:
               顶点节点
               边节点
               十字链表为邻接表不利于求出顶点的入度这个缺点而提出的,其节点结构如下:
               顶点节点
               弧节点
 
        图的存储结构
        图主要有以下4种存储结构:邻接矩阵、邻接表、邻接多重表及十字链表。其中最常用的存储结构为邻接矩阵和邻接表,尤其是邻接表。
        邻接矩阵是表示顶点之间相邻关系的矩阵。有n个顶点的图G=(V,E)的邻接矩阵为n阶方阵,其定义为:
        
        将邻接矩阵中的0、1换成权值,就是图的邻接矩阵。无向图的邻接矩阵是对称矩阵;顶点vi的度是邻接矩阵中第i行(或第i列)的元素1之和。有向图的邻接矩阵不一定是对称矩阵;顶点vi的出度是邻接矩阵中第i行元素之和,入度是邻接矩阵中第i列的元素之和。
        可见,通过邻接矩阵可以很容易地判定顶点间有无边(弧),容易计算顶点的度(出度、入度);缺点是所占空间只和顶点个数有关,和边数无关,在边数较少时,空间浪费较大。一般在顶点数较少且边数稠密时应用邻接矩阵。
        邻接表是为克服邻接矩阵在图为稀疏图时的空间浪费大这个缺点而提出的。
        邻接表是顶点的向量结构和边(弧)的单链表结构的集合,每个顶点节点包括两个域,将n个顶点放在一个向量中(称为顺序存储的节点表);一个顶点的所有邻接点链接成单链表,该顶点在向量中有一个指针域指向其第一个邻接点。邻接表的结构如下:
        顶点节点
        边(弧)节点
        其中,vexdata是顶点数据,firstarc是指向该顶点第一个邻接点的指针,adjvex是邻接点在向量中的下标,info是邻接点的信息,next是指向下一邻接点的指针。
        对无向图,容易求各顶点的度;边表中节点个数是边数的两倍。对有向图,容易求顶点的出度;若求顶点的入度则不容易,要遍历整个表。为了求顶点的入度,有时可设逆邻接表(指向某顶点的邻接点链接成单链表)。所谓逆邻接表就是对图中的每个顶点i建立一个单链表,把被i邻接的顶点放在一个链表中,即边表中存放的是入度边而不是出度边。一般在处理以顶点为主且为边稀疏时用邻接表。
        邻接多重表是为了解决邻接表不利于处理以边为主的情况,因为在邻接表中,每条边需要两个边节点,在以边为主处理图时,需判断此边是否处理过,增加了复杂性。图的邻接多重表中每个边只有一个节点,其节点结构如下:
        顶点节点
        边节点
        十字链表为邻接表不利于求出顶点的入度这个缺点而提出的,其节点结构如下:
        顶点节点
        弧节点
 
        存储结构
               邻接矩阵表示法
               对于具有n个顶点的图G(V,E)来说,其邻接矩阵是一个n阶方阵,且满足
               
               由邻接矩阵的定义可知,无向图的邻接矩阵是对称的,有向图的邻接矩阵就不一定对称了。借助邻接矩阵易判定任意两个顶点之间是否有边(或弧)相连,并且容易求得各个顶点的度。
               网(赋权图)的邻接矩阵可定义为
               
               邻接链表表示法
               邻接链表指的是为图的每个顶点建立一个单链表,第i个单链表中的节点表示依附于顶点vi的边(对于有向图是以vi为尾的弧)。邻接链表中的节点有表节点和表头节点两种类型。
               邻接矩阵和邻接链表表示法对有向图和无向图都适用。



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2023 All Rights Reserved
软考在线版权所有