7.2.4 邻接多重表

邻接多重表和邻接表的比较

  • 邻接多重表和邻接表都是链式存储结构

  • 邻接多重表是对于无向图而言,
    十字链表对于有向图而言。
    邻接表 有向图和无向图均可以。
    二维数组 有向图和无向图均可以。

  • 邻接表中每一条边 ( vi , vj ) 都有两个顶点,两个顶点结点分别在第 i 个 和 第 j 个链表中,给某些图的操作带来不便。
    如在邻接表中,需要对边进行某种操作,对访问过的边做标记或者删除某一条边,此时需要找到同一条边的两个结点。

邻接多重表的结构

  • 邻接多重表十字链表类似;
    无向图中的每一条边每一个顶点都用一个结点来表示。

  • 每一条边用一个结点来表示。包括 6 个域。
    在这里插入图片描述
    mark : 标志域,可用于标记本条边是否被搜索 / 遍历过。
    ivex 和 jvex :该边依附的两个顶点在图中的位置。(邻接多重表适用于无向图)
    ilink :指向下一条依附于顶点 ivex 的边。
    jlink :指向下一条依附于顶点 jvex 的边。
    info :指向和边相关的各种信息的指针域。

  • 每个顶点也用一个结点来表示。包括两个域。
    在这里插入图片描述
    data :存储和该顶点相关的信息
    firstedge :指示第一条依附于该顶点的边

无向图和它的邻接多重表示例

在这里插入图片描述

邻接表多重表代码表示

#define MAX_VERTEX_NUM 20

typedef enum
{
	unvisited,
	visited
} VisitIf //访问标记

typedef struct EBox
{
	VisitIf mark; //访问标记
	int ivex, jvex; //依附该边的两个顶点
	struct EBox *ilink, *jlink; //指向各自依附这两个顶点的下一条边
	InfoType *info; //该边信息指针
} EBox; // 边结点

typedef struct VexBox
{
	VertexType data; //存储顶点相关信息
	EBox *firstedge; //指向第一条依附于该顶点的边
} VexBox; // 顶点结点

typedef struct
{
	VexBox adjmulist[MAX_VERTEX_NUM];
	int vexnum, edgenum; //无向图的顶点数和边数
} AMLGraph; //一个无向图的邻接多重表
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值