1、
》》 邻接多重表是无向图的另一种链式存储结构。
》》 在邻接表中,容易求得顶点和边的各种信息,但在邻接表中求两个顶点之间是否存在边,或者
需要对边执行删除等操作时,需要分别在两个顶点的边表中遍历,效率较低。
》》 在邻接多重表中,每一条边用一个结点表示,其结构如下图:
说明1: 边的结点
a. mark : 标志域,可以用以标记该条边是否被搜索过
b. ivex 和 jvex : 表示该边依附的两个顶点在图中的位置
c. ilink : 指向下一个依附于顶点 ivex 的边
d. jlink : 指向下一个依附于顶点 jvex 的边
e. info : 指向和边相关的各种信息的指针域
说明2: 顶点的结点
a. data :存储该顶点的相关信息
b. firstedgc : 指示第一条依附于该顶点的边
补充1:在邻接多重表中,所有依附于同一个顶点的边串联在同一个链表中,由于每条边
依附于两个顶点,则每个边结点同时链接在两个链表中。
》》 无向图的邻接多重表表示法示例:
》》 图的邻接多重表存储结构定义如下:
#define MaxVertexNum 100 // 图中顶点数目的最大值
typedef struct ArcNode{ // 边表结点
boolean mark ; // 访问标记
int ivex , jvex ; // 分别指向该弧的两个结点
struct ArcNode *ilink , *jlink ; // 分别指向两个顶点的下一条边
// InfoType info ; // 相关信息指针
}ArcNode;
typedef struct VNode{ // 顶点表结点
VertexType data; // 顶点信息
ArcNode *firstedge; // 指向第一条依附于该顶点的边
}VNode;
typedef struct{
VNode adjmulist[MaxVertexNum]; // 邻接表
int vexnum , arcnum; // 图的顶点数和弧数
}AMLGraph; // AMLGraph 是以邻接表存储的图类型