mysql存储graph数据结构_数据结构之图(一)图的存储结构

图的存储结构相对于线性表和树来说更为复杂,因为图中的顶点具有相对概念,没有固定的位置。那我们怎么存储图的数据结构呢?我们知道,图是由(V, E)来表示的,对于无向图来说,其中 V= (v0, v1, ... , vn),E= { (vi,vj) (0 <=  i, j <=  n且i 不等于j)},对于有向图,E= {  (0 <=  i, j <=  n且i 不等于j)}。V是顶点的集合,E是边的集合。所以我们只要把顶点和边的集合储存起来,那么该图的所有数据就能够存储起来了。

本文只介绍两种比较常见和重要的图的存储结构:邻接矩阵和邻接表。

邻接矩阵,顾名思义,是一个矩阵,一个存储着边的信息的矩阵,而顶点则用矩阵的下标表示。对于一个邻接矩阵M,如果M(i,j)=1,则说明顶点i和顶点j之间存在一条边,对于无向图来说,M (j ,i) = M (i, j),所以其邻接矩阵是一个对称矩阵;对于有向图来说,则未必是一个对称矩阵。邻接矩阵的对角线元素都为0。下图是一个无向图和对应的临街矩阵:

1b2f5e34ccd911eb8ab7a15a6548e410.png

图1:无向图

75d24f348c5fe73af56d71e7c2d63986.png

图2:邻接矩阵

需要注意的是,当边上有权值的时候,称之为网图,则邻接矩阵中的元素不再仅是0和1了,邻接矩阵M中的元素定义为:

6018ed8a31b1dcb78cf645c783066eda.png

以下用C语言创建一个无向图的邻接矩阵:

头文件是:GraphStruct.h

1 /*GraphStruct.h

2 * 图的邻接矩阵存储方式,结构由顶点数量、边数量、顶点集合和边集合组成。3 * 其中顶点集合一维数组,根据顶点的数量动态分配数组大小。4 * 边集合是二维数组,根据顶点的数量来动态分配数组大小,对于无向图来说,该

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值