谢谢科普!
我就是在学到优先队列的时候,有点这个疑问的。
我看了一些优先队列的介绍文章,其本质是一个数组,各个下标映射成一棵虚拟的完整二叉树的父子节点,然后每次push()、pop()操作之后,要根据父子节点之间的优先级大小,将优先级高的元素推到堆顶。
此时我才产生了这个疑问,如果其本质是一个数组的话,那这一块数组的空间得是连续的,应该必须在事先分配好的,等满了之后,再重新realloc一块更大的空间。如果事先分配一个基本等于无限制的空间的话,那程序的其他部分岂不是没空间用啦?
【 在 z16166 的大作中提到: 】
: 大小一般都是size_t的,x64上基本等于没限制,取决于可用内存
: 有bucket形式的存储,分散的,比如红黑树(红黑树实现的一般是容器,不是队列)。这种对cpu cache不友好。
: 也有连续形式的存储,对cpu cache更友好。
: ...................
--
FROM 49.84.160.*