学习笔记-优先队列(Python实现)

优先队列是一种重要的缓存结构。优先队列总是会弹出当前元素中优先级最高的。当插入元素时,将其插入到满足当前优先级顺序的位置。 

当用列表来实现优先队列时,可以考虑利用元素在列表中的先后顺序来表示优先级关系。为了在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)

猜你喜欢

转载自blog.csdn.net/qq_34840129/article/details/80627125