图的存储方法


1. 邻接矩阵法
想象一下,你有一张大表格,每个格子代表两个点之间是否有连接。如果两个点之间有连接,格子里就写上1,没有连接就写上0。这个方法的好处是,你一眼就能看出两个点之间有没有路。但缺点是,如果点很多,这张表就会变得非常大,占用很多空间。
2. 邻接表法
这个方法就像是给每个点做一个通讯录,记录它所有的朋友。每个点都有一个列表,上面写着它所有的朋友的名字。这个方法的好处是,如果你的朋友不多(也就是图里的点不多),那么这个方法就比较省空间。而且,如果你想看看一个点有哪些朋友,直接翻它的通讯录就可以了。
3. 十字链表
这个方法是专门为有向图设计的。想象一下,每个箭头(也就是图里的边)都有一个自己的小卡片,上面写着它从哪里来,到哪里去。同时,每个点也有自己的卡片,上面写着所有从它这里出发或者指向它的箭头。这个方法的好处是,你可以很清楚地看到每个箭头的来龙去脉。
4. 邻接多重表
这个方法是邻接表的一个升级版,专门用来处理无向图。在无向图里,边是双向的,所以这个方法会给每条边两个记录,一个从这个点出发,一个指向这个点。这样,你就可以很容易地找到所有连接到一个点的边。
 

知识点链接
1. 邻接矩阵法
概念:使用一个二维数组来存储图中顶点之间的邻接关系。
空间复杂度:O(n^2),其中 n 是顶点数。
特点:
无向图的邻接矩阵是对称的,只需存储上或下三角矩阵。
邻接矩阵的第 i 行非零元素数代表顶点 i 的度(无向图)或出度(有向图)。
容易判断两个顶点是否相连,但确定边的数量需要检测每个元素。
2. 邻接表法
结构:顶点存储在一维数组中,每个顶点都有一个指向其邻接点链表的头指针。
特点:
存储空间为 O(|V| + 2|E|)(无向图)或 O(|V| + |E|)(有向图)。
对于稀疏图,邻接表节省空间。
容易找出给定顶点的所有邻边。
有向图中求出度容易,求入度需遍历所有邻接表。
3. 十字链表
概念:专门用于有向图的存储方式,每条弧和每个顶点都有一个结点。
结构:包括弧结点和顶点结点,其中弧结点包含指向相同头或尾的下一条弧的指针。
特点:
只能存储有向图。
表示不唯一,但确定一个图。
4. 邻接多重表
概念:邻接表的变体,专门用于存储无向图。
结构:
顶点结构包含指向第一条依附于该顶点的边的指针。
边结构包含标志域、两个顶点的位置、指向下一条依附于相同顶点的边的指针,以及相关信息的指针。
特点:
只能存储无向图。
容易标记边是否被搜索过。
这些存储方法各有优缺点,适用于不同类型的图和场景。选择哪种存储方法取决于图的特定需求,如边的稠密程度、操作的频率等。
 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值