思路:
有没有可能把邻接表和逆邻接表结合起来。
所以就产生了十字链表(Orthogonal List)
为此我们重新定义顶点表结点结构:
| data | firstIn | firstOut |
firstIn:第一个入边
firstOut:第一个出边
然后定义边表结点结构
| tailVex | headVex | headLink | tailLink |
tailVex:弧起点的顶点的下标
headVex:弧终点的顶点的下标
headLink:逆邻接表
tailLink:邻接表
如下图所示:
十字链表结构复制,其实创建图算法的时间复杂度是和邻接表相同的,因此,在有向图中,十字链表是非常好的数据结构模型。
邻接多重表
如果要删除邻接表中的结点,那么就要把结点删除,然后把删除结点的前后两个结点连接起来。
所以比较复制。
对于这种情况,就产生了连接多重表。
重新定义边表结构,如下:
| iVex | iLink | jVex | jLink |
也就是说在邻接多重表里面,边表存放的是一条边,而不是一个顶点。
如下图所示:
边集数组
由两个一位数组构成,一个是存储顶点信息,一个存储边信息,这个边数组每个数据元素由一个边的起点下标(begin)、终点下标(end)和权(weight)组成。
如下图:

本文详细介绍了十字链表与邻接多重表这两种数据结构,十字链表结合了邻接表与逆邻接表的优势,适用于有向图;而邻接多重表则改进了边的删除操作,使得图的维护更加便捷。
1385

被折叠的 条评论
为什么被折叠?



