优先队列就是堆,大顶堆小顶堆的那个堆
堆排序原理见我的文章
堆排序详解及代码
还有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)
练手题目
这个题目很不错,为优先队列量身定制,适合入门。