图的储存结构

图的储存结构

1.邻接矩阵法

指用一个一维数组储存图中顶点的信息,用一个二维数组储存图中边的信息(即各顶点之间的邻接关系),储存顶点之间邻接关系的二维数组称为邻接矩阵。

//特点:
1.无向图的邻接矩阵一定是一个对称矩阵(并且唯一),因此在实际的储存中只需要储存上三角或者下三角就行了
2.对于无向图,邻接矩阵的第i行的非0元素个数正好是第i个顶点的度TD(vi)
3.对于有向图,邻接矩阵的第i行对应出度,第i列对应入度
4.用邻接矩阵法储存图,很容易确定图中任意两个顶点的之间是否有相连,但是要确定图中有多少条边,则必须按行,按列对每一个元素进行检测,所花费的时间代价很大。
5.稠密图适合使用邻接矩阵法进行表示
6.设图G的邻接矩阵A,A的n次方的元素A^n[i][j]对于由顶点i到顶点j的长度为n的路径的数目。

在这里插入图片描述

2.邻接表法

指对图G中的每一个顶点Vi单独建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对于有向图则是以顶点vi为尾的弧),这个单链表就称为顶点vi的边表(对于有向图则称为出边表)。

边表的头指针顶点的数据信息采用顺序存储,所以在邻接表中存在两种结点:顶点表结点边表结点

//特点
1.若G为无向图,则所需储存空间为O(V+2E),V是顶点个数,E是边数。有向图的存储空间为O(V+E)
2.对于稀疏图,采用邻接表表示极大节省空间
3.在邻接表中,给定顶点,很容易找到它的所有邻边,而在邻接矩阵中要扫描一行,花费为O(n)。但是如果要确定给定的两个顶点之间是否存在边,则在邻接矩阵中很快可以查到,但是在邻接表中需要遍历链表。
4.在有向图的邻接表表示,计算出度即计算其邻接表的结点个数,但是求其顶点的入度则需要遍历全部的邻接表。
5.图的邻接表表示方法不唯一

3.十字链表-储存有向图

在这里插入图片描述

十字链表法中有两种节点一种弧节点,一种顶点节点。

弧节点中有5个域:尾域(tailvex)和头域(headvex)分别指向弧尾和弧头这两个顶点在图中的位置;链域hlink指向弧头相同的下一条弧;链域tlink指向弧尾相同的下一条弧;info域指向该弧的相关信息。这样,弧头相同的弧就在一个链表上,弧尾相同的弧也在同一个链表上。

特点:

在十字链表中,即容易找到Vi为尾的弧,又容易找到Vi为头的弧,因而容易求得顶点的出度和入度。图的十字链表表示不是唯一的,但一个十字链表表示一个确定的图。

顶点节点之间是顺序储存的。

4.邻接多重表-储存无向图

在这里插入图片描述

5.四种储存方式的对比

在这里插入图片描述

图的基本操作

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值