邻接多重表是
无向图的一种存储方式。邻接多重表是邻接表的改进,它把边的两个顶点存放在边表结点中,所有依附于同一个顶点的边串联在同一链表中,由于每条边依附于两个顶点,则每个边表结点同时链接在两个链表中。
邻接多重表(adjacent multiList)是无向图(网)的另一种
链式存储结构。在此存储结构中,图的顶点信息存放在顶点数组中,数组元素有两个域:data域,存放与顶点相关的信息;firstedge域,指向一个单链表,此单链表存储所有依附于该顶点的边的信息。这些单链表的一个表结点对应一条边,表结点有六个域:mark为标志域,用来标记该边是否被访问过;ivex和jvex分别存放该边两个顶点在无向图中的位置;info域存放该边相关的信息,实际上就是弧的权值,对于无向图,info域可省略; ilink指向下一条依附于顶点ivex的边对应的表结点;jlink指向下一条依附于顶点jvex的边对应的表结点。
邻接表是图的一种顺序存储与链式存储相结合的存储结构,类似于树的孩子链表法顺序存储是指无向图中的顶点信息用一个一维数组来存储,一个顶点数组元素是一个顶点结点。顶点结点有两个域,一个是数据域(data),存放与顶点相关的信息;一个是指针域( firestar)存放该顶点的邻接表的第一个结点的地址。顶点的邻接表是把所有邻接于某结点的顶点构成一个表,它采用链式存储结构。邻接表中的每个结点保存的是与该顶点相关的边或弧的信息,它有两个域,一个是邻接顶点域 adnex),存放邻接顶点的信息,实际上就是邻接顶点在顶点数组中的序号:另一个是指针域( next arc),存放下一个邻接顶点的结点的地址。
邻接多重表主要用于存储无向图。因为如果用邻接表存储无向图,每条边的两个边结点分别在以该边所依附的两个顶点为头结点的
链表中,这给图的某些操作带来不便。例如,对已访问过的边做标记,或者要删除图中某一条边等,都需要找到表示同一条边的两个结点。因此,在进行这一类操作的无向图的问题中,采用邻接多重表作存储结构更为适宜。
在边表中,每条边只出现一次,但让这条边属于两个
单链表。邻接多重表的存储结构和
十字链表类似,也是由顶点表和边表组成,每一条边用一个结点表示。
在邻接多重表在邻接多重表中,所有依附于同一顶点的边串联在同一链表中,由于每条边依附于两个顶点,则每个边结点同时链接在两个链表中。可见,对无向图而言,其邻接多重表和邻接表的差别,仅仅在于同一条边在邻接表中用两个结点表示,而在邻接多重表中只用一个结点。因此,除了在边结点中增加一个标志域外,邻接多重表所需的存储量和邻接表相同。在邻接多重表上,各种基本操作的实现亦和邻接表相似。