python 手动实现一个 优先级队列

class PriorityQueue:
    """优先级队列"""
    def __init__(self):
        """初始化"""
        self._index = 0
        self._queue = []

    def push(self,item,priority):
        """向self._queue添加一个元素,并按-priority的大小进行堆排序"""
        heapq.heappush(self._queue,(-priority,self._index,item))
        self._index+=1

    def pop(self):
        """pop出self._queue中最大的的元素"""
        return heapq.heappop(self._queue)[-1]

class Item():
    def __init__(self,name):
        self.name = name

    def __repr__(self):
        return "Item('%s')"%self.name

if __name__ == '__main__':
    q = PriorityQueue()
    q.push(Item('foo'), 1)
    q.push(Item('bar'), 5)
    q.push(Item('spam'), 4)
    q.push(Item('grok'), 1)
    print(q.pop())

运行结果

Item('bar')
Item('spam')
Item('foo')

 

posted @ 2018-03-21 20:39  夜行书生  阅读(81)  评论(0)    收藏  举报