数据结构与算法5:图的存储结构

    图的存储方式主要有邻接矩阵,邻接表,十字链表,邻接多重表,边集数组等。
    
    1. 邻接矩阵
    邻接矩阵是通过一个二维表格的形式存放图的关系的。D[i][j]表示图中i节点到j节点是否有边或者边的权值。如果两个点没有边,那么D[i][j]=∞。这是很直观的方式,但是不方便节点的加入删除,对于稀疏图而言比较浪费空间。

    2. 邻接表
    邻接表的形式和树的孩子链表表示法是一样的意思。将整个图的节点存储于一个线性表中(零散放着也行),每个节点所连接的节点信息记录在一个链表中,该节点的指针去指向这个链表。这样的结构非常灵活,也节省空间,不好的地方就在于,假如图是有向图,那么邻接表只方便查找节点指出去的节点,而对于指向它的节点就不方便查找了。
    为了解决这个问题,在需要的时候可以创建一个逆邻接表。逆邻接表的结构和邻接表相同,但表示连接信息的链表存储的是指向该节点的节点信息。

    3. 十字链表
    十字链表是针对有向图的,目的是把邻接表和逆邻接表的特点结合到一起。有向图中的边一般称作弧。
    十字链表看起来有点复杂,其实就是对邻接表的扩充而已。十字链表中使用的链表节点不再是表示一个点的位置信息,而是表示一条弧的信息。同时,每个节点有两个指针域,分别对应着邻接表和逆邻接表中的指针的作用。十字链表的数据节点也有两个指针域,一个指向了以这个节点为起点的弧,一个指向以这个节点为终点的弧。这样一来就把邻接表和逆邻接表糅合到了一起,每个边表节点同时起到表示指出方向的弧和指入方向的弧,交错在一起,“十字”链表嘛。
    
    4. 邻接多重表
    邻接多重表实在没有找到说得明白的资料,看得一头雾水。这是一种对无向图邻接表的改良,参考了十字链表的方式给表示边关系的节点添加了一个指针域。邻接多重表大家还是另找资料研究吧。

    5. 边集数组
    边集数组由两个数组构成。一个是节点数组,存储了节点的数据。另一个是边数组,这是一个n*3的二维数组,每一行表示一条边,一行的三个数据分别表示起点、终点、权值。这是一种和邻接矩阵不一样的思路,更节省空间,和邻接表比起来各有特点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值