数据结构--图的存储方式 逻辑----笔记、详讲

目录

预备知识

领接矩阵

无向图的二维数组

有向图的二维数组

网图的二维数组(带权值的图)

领接表

无向图的领接表

 有向图的领接表

带权的领接表

逆邻接表

小结(承上启下)

十字链表

顶点集合

 边集

 组合

解释

小结

领接多重表(不常用)

连线

边集数组(不常用)最简单的表达方式!


预备知识

出度(out-degree)和入度(in-degree)通常是与有向图相关的概念。

对于一个有向图中的一个节点,其出度表示从该节点出发可以到达多少个其他节点,也就是该节点所指向的其他节点的数量;其入度表示可以到达该节点的其他节点的数量,也就是指向该节点的其他节点的数量。

领接矩阵

用一维数组存储顶点,用二维数组存储边

 

无向图的二维数组

1.能判断两个顶点之间是否有边

2.能知道顶点的度(度是指一个顶点与其他顶点相邻的边的数量)

3.无向图的边是对称的

有向图的二维数组

1.同上1

2.出度和入度,行代表出度,列代表入度。

3.不一定是对称的

网图的二维数组(带权值的图)

比如顶点代表工程,边权值代表时间、工期,从v1到v2,用多少天。

边被赋上权值代表过程,可以理解为天数、花费、距离等等。

二维数组里面的值填权值,没有边的地方,一般给无穷大(在真实数据当中不存在的数,一般情况下用无穷大)。

领接表

数组+链表=顶点集合+边集

无向图的领接表

还是用上面的那个图

 有向图的领接表

一条边有方向(弧),带箭头的地方叫弧头,不带的地方叫弧尾。

从弧尾指向弧头。

 每一个顶点对应的边,是它的出度

带权的领接表

增加一条权值的属性。就是说一个属性代表领接表的下标(数组下标),另一个属性代表权值。

逆邻接表

只针对于有向图,无向图没有逆邻接表

每一个顶点对应的边,是它的入度

 所以,无向图没有逆邻接表的原因,就是因为没有指向,是一样的。

小结(承上启下)

领接表很优秀,省空间。而领接矩阵对于大型稀疏图,可能会消耗大量的存储空间和计算资源。

但是,领接表对于有向图而言,如果需要两个属性出度和入度,单一的领接表或者逆邻接表都不好表示、实现。

所以,将领接表和逆领接表组合起来,称为十字链表

十字链表

领接表和逆领接表的组合(强行组合)

顶点集合

 边集

 组合

先画出领接表

 接着画逆领接表,我要找指向我的边,我是弧头(箭头所在的位置)。

那我就找弧头(箭头所在的位置)。

v0所在的位置是弧头的,只有一个,谁指向我捏,v3指向我。

 再看v1

 v0指向我,没有其他的啦。

再看v2

一个v0一个v1分别指向了v2。

最后看v3

v2指向了v3.

完事。

解释

首先,出度(指针)为构建领接表,入度(指针)则为逆领接表。具体看表格

其次,一个弧的弧头和弧尾是确定的,这一点要明确,所以两表共用边集(废话哈哈哈)

最后,逆领接表,我要找指向我的边,我是弧头,那我看谁的边集中弧头在顶点中的位置是我就可以啦。可能有多个指向我的,所以可以用弧头指针,指向弧头在顶点中的位置是我的。

小结

对于图而言,基础的就是矩阵和领接表

十字链表=我既想要领接表的结构又想要逆领接表的结构

领接表的无向图,对边来操作,删除一条边,至少要删两次,还要找到,重点放在边上,更关注边=领接多重表

领接多重表(不常用)

在无向图的基础上,对边进行频繁操作

做出顶点集后,先把边集表示出来

 注:顶点和领接点可以互换,因为是无向图嘛,比如右边的边集中的0   1页可以写成 1   0.

连线

只要有这个顶点,就连上,因为是无向图,不用考虑方向。

 它所对应的领接点,1   3    2

再看v1

和v1有关的边  0   2.

 所以,只要找到有相同的点就可以啦。

如果这时要删除某一条边,就很简单了。

边集数组(不常用)最简单的表达方式!

两个一维数组构成,一个表示顶点,一个表示边。

本质是还是一个二维数组,但表示边的为结构体数组,分别记录开始结点和结束结点,一般表达有向图

正儿八经的存储

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天写bug的屑闲鱼

请我杯饮料吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值