优先队列总是会弹出当前元素中优先级最高的。当插入元素时,将其插入到满足当前优先级顺序的位置。 优先队列是一种重要的缓存结构。
当用列表来实现优先队列时,可以考虑利用元素在列表中的先后顺序来表示优先级关系。为了在O(1)时间内弹出优先级最高的元素,所以应该将优先级最高的元素放在列表的表尾。
在以下的实现中,值较小的元素具有更高的优先级。
class ListPriQueueValueError(ValueError): pass class Pri_Queue(object): def __init__(self, elems=[]): self._elems = list(elems) self._elems.sort(reverse=True) def is_empty(self): return self._elems is [] def peek(self): if self.is_empty(): raise ListPriQueueValueError("in pop") return self._elems[-1] def dequeue(self): if self.is_empty(): raise ListPriQueueValueError("in pop") return self._elems.pop() def enqueue(self, e): i = len(self._elems) - 1 while i >= 0: if self._elems[i] < e: i -= 1 else: break self._elems.insert(i + 1, e) if __name__ == "__main__": temp = Pri_Queue(['a', 'b', 'g', 'd']) temp.enqueue('f') print(temp._elems) print(temp.peek()) temp.dequeue() print(temp._elems)