图的存储结构

1.邻接矩阵:

用两个数组来表示图。一个一维数组存储图中顶点的信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。

设图G有n个顶点,则邻接矩阵是一个n×n的方阵,定义为:

mrc[i][j]=1,该边或弧存在则标为1 

             = 0,不存在的边标为0

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 主对角线的值都为0,因为不存在顶点到自身的边。arc[0][1]=1代表V0到V1的边存在,为零则代表该边不存在。因为是无向图,所以arc[0][1]=arc[1][0],是关于主对角线对称的,所以无向图的边数组是一个对称矩阵。(a(ij)=a(ji))

某个顶点的度等于该顶点在矩阵中的第i行(第i列)的元素之和,V1的度=1+0+1+0=2。

 

有向图样例:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 V1的入度等于V1列的元素之和

V1的出度等于V1行的元素之和

 

设图G是网,

则邻接矩阵是一个n×n的方阵,定义为:

mrc[i][j]=W(ij),该边的权值

              =0,i=j

              =∞,其他不存在的边

 

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

2.邻接表:

邻接表是一种把数组与链表相结合的存储方法。

图中顶点用一个一维数组存储,每个数据元素还需要存储指向第一个邻接点的指针域。

图中每个顶点的所有邻接点构成一个单链表,无向图称为顶点的边表,有向图称为顶点作为弧尾的出边表。

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16 

 有向图样例:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 

 其逆邻接表为:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 有向图的邻接表是以顶点为弧尾来存储边表的,这样很容易得到每个顶点的出度,有时为了确定顶点的入度,可以以顶点为弧头来存储边表,称为有向图的逆邻接表。

 

对于带权值的网图,可以在边表结点在增加一个数据域weight,如图:

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16 

 

3.十字链表:

把邻接表与逆邻接表结合起来。

 

其顶点表设置为一个数据域data,两个指针域firstin表示入边表头指针,firstout表示出边表头指针。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 其边表结点设置为tailvex表示弧的起点的下标,headvex表示弧的终点的下标,headlink表示入边表的指针域,指向终点等于headvex的下一条边,taillink表示出边表的指针域,指向起点等于tailvex的下一条边。如果是网,可以再加一个数据域weight。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

4.邻接多重表:

其顶点表与邻接表一样

其边表设置为:ivex  ilink  jvex  jlink

其中ivex和jvex是该边所依附的两个结点

ilink指向依附于顶点ivex的下一条边

jlink指向依附与顶点jvex的下一条边

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16 

 5.边集数组

边集数组是由两个一维数组构成。一个是存储顶点的信息,另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin)、终点下标(end)和权(weight)组成。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值