【07】图的数据结构

一、邻接矩阵的定义
逻辑结构分为两部分:V和E集合,其中,V是顶点,E是边。因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。
(1)无向图的邻接矩阵
在这里插入图片描述
(2)有向图的邻接矩阵
在这里插入图片描述
在这里插入图片描述
特点:
有向图邻接矩阵不一定对 称;
有向图中 : 顶点 vi 的出度是邻接矩阵中第 i 行中 1 的个数。
顶点 vi 的入度是邻接矩阵中第 i 列中 1 的个数。
(3)网的邻接矩阵
在这里插入图片描述
2.邻接矩阵复杂度分析
(1)时间复杂度
边查找:对于查找图中任两个顶点i和j之间有无边,以及边上的权值,可根据i, j的值随机查找,时间复杂性为O(1)。
顶点度计算:计算一个顶点的度(或入度、出度)和邻接点,其时间复杂性为O(n)。
(2)空间复杂度:O(n2)
如果用来表示稀疏图,则会造成较大的空间浪费。
二、邻接表
图的邻接矩阵表示法虽然有其自身的优点,但当图的边数较少时,邻接矩阵就会出现大量的0元素,存储这些0元素将耗费大量的存储空间。因此,对于稀疏图,可以用邻接表去存储。
1.邻接表的定义
邻接表是一种顺序存储与链式存储相结合的存储方法,顺序存储部分用来保存图中顶点的信息,链式存储部分用来保存图中边(或弧的信息)。
(1)无向图的邻接表
在这里插入图片描述
(a)若无向图中有 n 个顶点、e 条边,则其邻接表需 n 个头结点和2e 个表结点。所以无向图的边数等于所有表结点个数之和的一半。
(b)无向图中顶点 vi 的度为第 i 个单链表中的结点数目。
(2)有向图的邻接表
在这里插入图片描述
邻接表的特点:
(1)有向图中顶点 vi 的出度为第 i 个单链表中的结点数目。
(2)顶点 vi 的入度为整个单链表中邻接点域值是i 的结点个数。
找出度易,找入度难。
(3)图的弧数等于所有表结点个数之和。
为了便于求顶点的入度,可以定义逆邻接表:以顶点vi为终点建立邻接表。
在这里插入图片描述
逆邻接表的特点:
(1)顶点 vi 的入度为第 i 个单链表中的结点个数。
(2)顶点 vi 的出度为整个单链表中邻接点域值是i 的结点个数。
找入度易,找出度难。
2. 邻接表的空间复杂度分析
在图的邻接表和逆邻接表表示中,
(1)表头需要占用n个头结点的存储空间,所有边结点需要占用2e(对于无向图)或e(对于有向图)个边结点空间,所以其空间复杂度为O(n+e)。
(2)邻接表用于表示稀疏图比较节省存储空间,因为只需要很少的边结点,若用于表示稠密图,则将占用较多的存储空间,同时也将增加顶点的查找结点时间。

猜你喜欢

转载自blog.csdn.net/The_Handsome_Sir/article/details/106422414