写在前面
- C语言没有自带常用数据结构的库,所以当需要使用它们处理问题时必须自己实现它们。
- 解题时快速并正确实现数据结构的
ADT
可以为我们节省宝贵的时间去解决真正的问题。 - 本博客本更像是个人的排坑排雷笔记,讲解不全请见谅,但如果对你有一点启发那就再好不过了。
优先队列
为了简单起见,存放数据的结构使用数组。
- 组织序号
我们知道优先队列,也叫大(小)顶堆(默认为二叉堆)。堆是一棵完全二叉树
,但实际上我们使用数组并通过组织序号便能够表示它,这依赖于完全二叉树的良好性质。
为防止以后出错或造成混乱,实现前一定要先确定好如何组织序号:
-
从 i n d e x = 0 index = 0 index=0 开始存放数据
s o n = 2 ⋅ d a d + 1 son = 2\cdot dad+1 son=2⋅dad+1 -
从 i n d e x = 1 index = 1 index=1 开始存放数据(此时数组的第一个位置不要存放元素)
s o n = 2 ⋅ d a d son = 2\cdot dad son=2⋅dad(1)上面的 s o n son son均为
左儿子
,因为实际情况右儿子可能不存在,而且显然 s o n r i g h t = s o n l e f t + 1 son_{right}=son_{left}+1 s