数据结构之图的邻接表存储方法

图的邻接表是一种顺序分配(如数组)和链式分配(如链表)相结合的存储方法。其中数组(顺序分配)用来存放图的各个顶点的数据信息,链表(链式分配)用来存放依附于相应顶点的边的信息。

数组中的每个顶点的信息都是由两部分组成的:顶点域和指针域。结构如下:

V Link
其中,V表示顶点域,用来存放顶点数据信息,Link表示指针域,用来表示依附于该顶点的第一条边的链结点地址。

网的链表每个节点包含三个要素:顶点位置,权值,指针域。若图不是网络,则可以去掉权值这个要素。结构如下:

Position Weight Next
其中,Position表示与链表中与头结点相连边的另一端点的顶点位置,Weight表示该条边的权值,Next指出与头结点邻接的下一条边对应的边结点的位置。


通常情况下,我们将n个顶点的数据信息存放在一个V[n]数组中,该数组中的每一个数据均表示链表的头结点,共有n个链表。举个例子,如下图所示:


该图中共有5个顶点,因此顶点数组下标为0~4。顶点1,2之间存在权值为3的边,顶点2,3之间存在权值为4的边,顶点3,4之间存在权值为9的边,顶点4,5之间存在权值为6的边,顶点5,1之间存在权值为2的边。邻接表如下:


下面我们通过代码来构建以下上述图中的邻接表。

首先建立顶点与边结点的结构。


 
 
 
  1. //邻接表的边结点类型
  2. typedef struct edge {
  3. int adjvex; //该边的终止顶点在顶点数组中的位置
  4. int weight; //该边的权值
  5. edge* next; //指向下一个边结点
  6. }ELink;
  7. //邻接表的顶点类型
  8. typedef struct ver {
  9. int vertex; //顶点的数据信息
  10. ELink* link; //指向第一条边对应的边结点
  11. }VLink;

然后创建一个邻接表。


 
 
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值