基于list实现的优先队列
class PrioQueueError(ValueError):
pass
class PrioQue:
def __init__(self, elist=[]):
self._elems = list(elist) # 1.对实参表做拷贝,避免共享。2.使构造函数的实参可以使任何可迭代对象。
self._elems.sort(reverse=True) # 较小作为优先级
def enqueue(self, e):
'''
while的条件循环保证优先度相同元素的正确排序顺序,
使同优先级的元素能先进先出
'''
i = len(self._elems) - 1
while i >= 0:
if self._elems[i] <= e:
i -= e
else:
break
self._elems.insert(i+1, e)
def is_empty(self):
return not self._elems
def peek(self):
if self.is_empty():
raise PrioQueueError("in top")
return self._elems[-1]
def dequeue(self):
if self.is_empty():