大根堆优先队列怎么写
时间: 2024-08-16 21:05:28 浏览: 36
大根堆是一种特殊的二叉堆数据结构,它满足父节点的值大于或等于其子节点的值的性质,也称为最大堆。在优先队列(Priority Queue)中,大根堆常用于实现,因为它的特性保证了元素总是按照优先级从高到低排序。
以下是使用Python实现一个基于大根堆的简单优先队列:
```python
import heapq
class MaxHeapPriorityQueue:
def __init__(self):
self._queue = []
self._index = 0
# 插入元素并保持堆的性质
def push(self, item):
heapq.heappush(self._queue, (-item, self._index))
self._index += 1
# 删除堆顶元素(最小负数,即最高优先级)
def pop(self):
if not self.is_empty():
return -heapq.heappop(self._queue)
# 检查是否为空
def is_empty(self):
return len(self._queue) == 0
# 返回队列大小
def size(self):
return len(self._queue)
# 使用示例
pq = MaxHeapPriorityQueue()
pq.push(5)
pq.push(3)
print(pq.pop()) # 输出: 5
```
在这个实现中,`push`操作将元素转换为一个元组(-item, index),然后推入堆。`pop`操作则返回堆顶元素,由于我们取的是最小的负数,所以实际上是最高的优先级。当你需要添加或删除元素以及查看队列状态时,可以使用相应的方法。
阅读全文