前言
近期一直在构建算法技能树的数据,借此机会,重新把数据结构与算法又温习了一遍,在看到十字链表与邻接多重表的画法时,十分的不理解,在C站找资料时,发现也看不懂,于是上B站,终于明白了十字链表与多重邻接表的画法。
一、十字链表
我们以下面的有向图为例来进行讲解
首先我们有几个定义要搞清楚:
如果:
则我们称V0
是弧尾, v3
是弧头
反之,如果:
则我们称v1
是弧尾,v0
是弧头。
firstin: 入边表头指针,指向该顶点的入边表中第一个节点
firstout: 出边表头指针,指向该顶点的出边表中第一个节点
tailvex: 弧的尾节点
headvex: 弧的头节点
headlink: 指向和这条弧有相同头节点的点;同头
taillink: 指向和这条弧有相同尾节点的点; 同尾
用下面的图表示:
以上重要概念都清楚后,下面我们开始画十字链表。
总的来说,分为三步:
1.画邻接表
接着,进入第二步
2.增加弧节点的域
我们将上图换成十字链表的格式
我们将其补齐,如下图:
然后,我们把这四个顶点标到图上去,如下:
接着,进入第三步
3.自己指向自己
第二步完成后,我们的图变成了现在这个样子:
接下来,我们就开始自己指自己的过程
从v0开始,将图中v0相连
接着v1,将图中所有v1相连
接着v2,v3,最终的结果如下:
至此,上图就是例子中有向图的十字链表。
二、邻接多重表
我们以下面的无向图为例
ivex、jvex: 与某条边依附的两个顶点在顶点表中的下标
ilink: 指向依附顶点ivex的下一条边
jlink: 指向依附顶点jvex的下一条边
1.画顶点
上面的无向图告诉我们它有四个顶点和五条边,所以,我们我们先将四个顶点和五条边的边表结构画出来,由于是无向图,所以ivex
和jvex
的顺序是可以互换的。
2.画边
3.自己指向自己
首先,我们从v0开始,v0的下标是0,将所有与v0有关的边连接起来。
其中,最后一个矩形,0
和2
之间的^
表示空,因为再往下找没有与v0有关的边了,所以填入空
再连接所有与v1有关的边
接着是v2,v3
至此,上图就是例子中无向图的邻接多重表
最后,看完这篇文章还没懂的话可以点击一下链接观看视频: