十字链表和邻接多重表

十字链表——针对有向图

原先对于有向图的链式存储而言,我们有邻接表逆邻接表两种表示方法,但这两种方式都有缺陷,如果我们想要求得某个结点(Vertex)的度,那么就需要统计该结点的入度和出度,而邻接表只能以较低的时间复杂度去获得出度信息,要以遍历全表的时间来获得入度信息,逆邻接表也遭遇同样的问题。那么通过构建新的结构——十字链表就可以解决这个问题。

其实十字链表是邻接表和逆邻接表的结合,实线箭头是邻接表的部分,而虚线箭头则是逆邻接表的部分。

taillink是继续连接以tailvex结点为弧尾(即起始点)的结点,headlink是继续连接以headvex结点为弧头(即终点)的结点

对于顶点表结构而言,firstin指的是入度,firstout指的是出度


邻接多重表——针对无向图

对于无向图的链式存储而言,可以沿用原先的邻接表结构,但在这种结构中,我们删除某个结点时,需要对两个结点进行删除,比较繁琐。所以,我们可以对十字链表进行改进,修改其定义的边表结点结构。

由于是无向图,ivexjvex如果相反也是没有问题,接下来只需要理解边表结点之间如何连接即可。

其中,ivexjvex是某条边依附的两个结点,ilink指的是依附于ivex的结点,jlink指的是依附于jvex的结点

所有ivex相同的结点需要通过ilink连接在一起,所有jvex相同的节点需要通过jlink连接在一起

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2015-2024 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信