邻接表存无向图时每条边存了两次(两端点各一次),删除边/顶点不方便。邻接多重表用每个边结点表示一条边:
边结点:
┌─────┬─────┬───────┬───────┬───────┬───────┐
│mark │ivex │ilink │jvex │jlink │info │
└─────┴─────┴───────┴───────┴───────┴───────┘
ivex, jvex:边的两个顶点;ilink:依附于 ivex 的下一条边;jlink:依附于 jvex 的下一条边;mark:访问标记;info:边信息(权值)。顶点结点仅 data + firstedge(指向第一条依附边)。示例图 0-1、0-2、1-2、1-3、2-3 的邻接多重表:
[0] → edge(0,1) → edge(0,2)
[1] → edge(0,1) → edge(1,2) → edge(1,3)
[2] → edge(0,2) → edge(1,2) → edge(2,3)
[3] → edge(1,3) → edge(2,3)
邻接表查出度方便,查入度要遍历整表。十字链表同时存出边与入边,每个弧结点:
弧结点:
┌─────┬───────┬───────┬───────┬───────┐
│tailvex│headvex│hlink │tlink │info │
└─────┴───────┴───────┴───────┴───────┘
tailvex 弧尾、headvex 弧头。hlink = 弧头相同的下一条弧(入边链);tlink = 弧尾相同的下一条弧(出边链)。顶点结点含 data + firstin + firstout,分别链出入弧与出弧。查入度、出度都只需遍历对应链表 —— 相当于把邻接表 + 逆邻接表合并。
| 考点 | 说明 |
|---|---|
| 结构识别 | 给定图,画出邻接多重表或十字链表 |
| 边操作 | 在邻接多重表中删除某条边 |
| 度的计算 | 在十字链表中求入度 / 出度 |
hlink 是入边链、tlink 是出边链,别搞反。↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。