优先队列就是堆,大顶堆小顶堆的那个堆

堆排序原理见我的文章
堆排序详解及代码
还有weiwei哥的优先队列文章详解,非常不错

python和c++都有自己的优先队列/堆的库,不需要自己手动实现。

c++优先队列实现

大顶堆: priority_queue<int> maxHeap
小顶堆: priority_queue<int, vector<int>, greater<int>> minHeap

  • 添加元素 maxHeap.push(num)
  • 弹出堆顶元素 maxHeap.pop(num)
  • 获得堆顶元素 maxHeap.top()

python优先队列实现

使用函数对列表进行操作来把列表变为优先队列

通过库 heapq 来使用堆
python只有小顶堆,所以要想实现大顶堆,可以考虑把元素取负

minHeap = []

  • 添加元素 heapq.heappush(minHeap, num)
  • 弹出堆顶元素并返回 heapq.heappop(minHeap)
  • 把已有列表变成堆 heapq.heapify(list)

练手题目

这个题目很不错,为优先队列量身定制,适合入门。