数据结构 之 图的存储结构(十)

提示:图的存储结构是一篇非常重要的内容,大家一定要认真看哦。


图的存储结构

图的存储结构或表示方式比较多,在选择图的存储结构时,通常取决于具体的应用和所定义的操作。

下面介绍两种基本的存储结构,
邻接矩阵(顺序存储)
邻接表(顺序分配和链式分配相结合)。


邻接矩阵表示法

设图G=(V,E)是具有n个顶点的图,顶点序号依次为0,1,…,n-1,
定义一个大小为n的向量存储顶点的信息;(向量可以理解为数组)
定义一个具有以下性质的 n阶的方阵A(邻接矩阵)存储顶点间的相邻关系:
在这里插入图片描述对于如下无向图G1的邻接矩阵

无向图邻接矩阵

从上面的存储表示可以看出,图的邻接矩阵表示法具有以下特点:
对于【无向图】,邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的度TD(vi);
【无向图】的邻接矩阵一定是对称的 ,对于无向图,由于其对称性,只需存入上(或下)三角的元素,故只需n(n+1)/2个单元。

对于如下有向图G2的邻接矩阵

邻接矩阵表示法

从上面的存储表示可以看出,图的邻接矩阵表示法具有以下特点:
在这里插入图片描述

【有向图】的邻接矩阵不一定对称。
因此,用邻接矩阵来表示一个具有n个顶点的有向图时需要n的平方个单元来存储邻接矩阵;

网的邻接矩阵表示法

若G是网,则:
Wij表示边上的权值;∞代表一个计算机允许的、大于所有边上权值的正整数;也就是说两个顶点之间的距离是无穷大。零代表是两个顶点之间距离为0。
在这里插入图片描述
对于如下网G4的邻接矩阵
在这里插入图片描述

邻接矩阵表示法 -----优点和缺点

邻接矩阵表示法优点: 很容易确定图中任意两个顶点间是否有边(或弧)相连。
邻接矩阵表示法缺点:要测试图中边(或弧)的数目时,则必须按行、列逐个检测。
这样所花的时间比较多,对于一个边(或弧)的数目很少的图是很不合算的。

邻接表

图的 邻接表是一种 顺序分配 链式分配相结合的存储结构。

邻接表表示:对图中的每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的所有的边。
每个结点由两个域组成,其中邻接点域 :指示与顶点vi邻接的顶点在图中的序号, 链域:指示依附于顶点vi的下一条边或弧所对应的结点。如果用邻接表表示网 ,则还需要在结点中增加一个存放权值的域
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

邻接表特点

若无向图G有n个顶点,e条边,则邻接表需n个 表头结点2e 表结点
显然,对于边很少的图,用邻接表比用邻接矩阵要节省存储空间。

无向图的邻接表中,顶点vi的度=第i个链表中表结点的个数。
有向图的邻接链表中:
第i个链表中的表结点的个数=顶点vi的出度
若要求vi的入度,必须扫描整个邻接表,统计顶点域的值为i的表结点的数目。显然,这是很费时间的。(出度计算容易,入度计算难)

小结

掌握图的基本概念,例如完全图,顶点的度,连通和连通分量的概念等。

掌握图的两种基本的存储结构,邻接矩阵和邻接表表示。
对于有向图还要掌握逆邻接表表示。这里不多做讲解,有需要的同学可以自学。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值