
【计】 adjacency multilist
neighbor; adjacency; abut; abut upon; abutment; adjoin; bound
【机】 adjoin
excessive; many; more; much; multi-
【计】 multi
【医】 multi-; pleio-; pleo-; pluri-; poly-
again; layer; repeat; scale; weight
【计】 repetitive group
【医】 hyper-; weight; wt.
rota; surface; table; watch
【计】 T
【化】 epi-
【医】 chart; meter; sheet; table
【经】 schedule
邻接多重表(Adjacency Multilist)是一种用于存储无向图的数据结构。它通过优化边的存储方式,有效避免了邻接表在表示无向图时对同一条边的重复存储问题,从而节省了存储空间。其核心思想是每条边只存储一次,并通过指针将关联的顶点和边连接起来。
顶点节点 (Vertex Node)
data
:存储顶点的数据信息(如顶点名称、编号)。firstedge
:指向与该顶点相关联的第一条边的指针。Vertex Node
或 VNode
。data
字段存储 vertex data,firstedge
是指向第一条关联边 (incident edge) 的指针。边节点 (Edge Node)
mark
:标志位(可选),可用于标记该边是否被访问过或用于算法处理。ivex
和 jvex
:存储该边所依附的两个顶点在顶点数组中的索引。ilink
:指向依附于顶点 ivex
的下一条边的指针。jlink
:指向依附于顶点 jvex
的下一条边的指针。info
:可选字段,用于存储边的权值或其他相关信息。Edge Node
或 ENode
。mark
是访问标记 (visit mark),ivex
/jvex
是顶点索引 (vertex index),ilink
/jlink
是链接指针 (link pointer),info
存储边信息 (edge information/weight)。Vi
,其 firstedge
指向与该顶点相连的某一条边的边节点(例如 E1
)。通过该边节点的 ilink
或 jlink
指针(具体取决于 Vi
是该边节点的 ivex
还是 jvex
),可以找到依附于 Vi
的下一条边(例如 E2
)。如此链接下去,直到某个指针为空 (NULL
),表示该顶点关联的边已遍历完。ilink
和 jlink
分别链入顶点 A 和顶点 B 的边链表中。空间复杂度为 O(|V| + |E|)
(|V| 是顶点数,|E| 是边数)。邻接多重表特别适用于需要频繁操作边(如删除边、查询边信息)且对空间要求较高的无向图应用场景。
权威参考来源:
邻接多重表 (Adjacency Multilist
) 是一种高效存储无向图的数据结构,其核心在于顶点节点 (Vertex Node
) 通过 firstedge
指针关联边节点 (Edge Node
),而边节点通过 ilink
和 jlink
指针将依附于同一顶点的边链接起来,实现了每条边仅存储一次,显著节省了空间。理解其顶点节点和边节点的结构及其链接方式是掌握该数据结构的关键。
邻接多重表是无向图的一种链式存储结构,旨在优化传统邻接表的存储效率,解决边重复存储的问题。以下从定义、结构、优势及应用场景进行详细说明:
邻接多重表通过将每条边的两个顶点信息整合到一个边表结点中,使该结点同时链接到两个顶点的链表中。其核心目的是解决邻接表存储无向图时每条边需存储两次(即两个顶点各存一次)的问题,从而减少存储冗余,提升操作效率。
顶点表结点
包含两个域:
边表结点
包含以下关键域:
邻接多重表特别适用于以下场景:
顶点表:
顶点A → 边1 → 边3 → ...
顶点B → 边1 → 边2 → ...
顶点C → 边2 → 边3 → ...
边表结点(边1):
iVex=A, jVex=B
iLink→边3, jLink→边2
(图中每条边通过指针链接到两个顶点的链表中)
邻接多重表通过合并重复边信息,解决了邻接表在无向图存储中的冗余问题,同时简化了边的操作流程。其链式结构兼顾了空间效率与操作灵活性,是无向图存储的理想选择之一。
【别人正在浏览】