什么是优先队列
首先,队列大家都知道, 是一个非常基础的数据结构, 它的特点是先进先出(FIFO)。
而优先队列却不一定是先进先出,因为每个元素都有一个权重值, 代表着元素出队的优先级。...队列可以用数组和链表实现, 简单、高效, 这样入队和出队的时间复杂度都是 O(1)。
优先队列能不能使用上面的方法呢?...其实可以用数组存储堆, 我们可以通过”广度优先遍历“ 的方法, 把堆的节点映射到一个数组中,如下
另外,堆和数组之间还有下面的关系
1.堆的顶点就是数组的第一个元素,也是最小的元素。...2.通过子节点的下标,就可以通过公式计算出父节点的下标, 公式为
P = (C - 1) / 4
其中 P = 父节点的下标, C = 子节点的下标
现在优先队列的数据结构确定了, 接下来看元素的入队和出队...出队 Dequeue
出队,就是每次取队列内最小的元素,基小顶堆结构,其实只需要取堆顶的元素即可,对应数组的第1个元素 array[0]。