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