快速上手 C++ 数据结构与算法
王健伟
《C++ 新经典》系列作者,资深 C++ 讲师
3224 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
结束语 (1讲)
快速上手 C++ 数据结构与算法
15
15
1.0x
00:00/00:00
登录|注册

25|图的存储(下):为什么我们还需要邻接多重表和边集数组?

你好,我是王健伟。
上节课我们讲解了用邻接矩阵、邻接表、十字链表进行图的存储,他们都有各自的优点、局限性和所适用的场景。这节课,我就带你学习另外两种图的存储结构,分别是邻接多重表和边集数组。

邻接多重表

邻接多重表是存储无向图的另一种链式存储结构。换句话说,邻接多重表只适合存储无向图。
使用邻接表存储无向图时,因为对于无向图从顶点 A 到顶点 B 有边,则必然意味着顶点 B 到顶点 A 有边,所以每一条边的存储会用到两个边节点,而且这两个边节点会位于两个不同的链表中(参考上节课的图 3)
图0 图的存储(上)-图3
这不但造成了存储空间的浪费,也让边的操作更麻烦,比如删除边时必须考虑在两个单链表中都进行删除操作。
所以,在一些场合下,采用邻接多重表来存储就会更加适合,尤其是对于边操作,比如对已经访问过的边做标记,删除边等等,就很合适。
邻接多重表的结构类似十字链表,也分表示边的节点结构和表示顶点的节点结构。表示边的节点结构一般如下定义:
//表示边的节点结构
struct EdgeNode_adjmt
{
int iidx; //边的第一个顶点下标
EdgeNode_adjmt* ilink;//指向下一个依附于iidx所代表的顶点的边
int jidx; //边的第二个顶点下标
EdgeNode_adjmt* jlink; //指向下一个依附于jidx所代表的顶点的边
//int weight; //权值,可以根据需要决定是否需要此字段
};
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了图的存储结构中的邻接多重表和边集数组。邻接多重表适用于无向图,通过链表高效地表示图的结构;而边集数组适用于稀疏图,通过数组存储边的信息,节省存储空间。文章详细介绍了这两种存储结构的特点、结构和使用方法,并通过具体的代码和图示展示了它们的实现原理和应用场景。此外,文章还对比了不同存储结构的空间复杂度和操作便利性,为读者提供了全面的了解。通过本文,读者可以快速了解图的存储结构中邻接多重表和边集数组的特点和适用场景,为他们在实际应用中选择合适的存储结构提供了参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快速上手 C++ 数据结构与算法》
新⼈⾸单¥68
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部