1.5 实现一个优先级队列

问题
怎样实现一个按优先级排序的队列? 并且在这个队列上面每次pop操作总是返回优先级最
高的那个元素

"""
通过引入另外的 index 变量组成三元组 (priority, index, item) ,
就能很好的避免上面 的错误, 因为不可能有两个元素有相同的 index 值。
"""

import  heapq

class PriorityQueue:
    def __init__(self):
        self._queque=[]
        self._index=0

    def push(self,item,priority):
        heapq.heappush(self._queque,(-priority,self._index,item))
        self._index+=1
    def pop(self):
        return heapq.heappop(self._queque)[-1]

class Item:
     def __init__(self,name):
         self.name=name
     def __repr__(self):
         return  "Item({!r})".format(self.name)


q = PriorityQueue()
q.push(Item('foo'), 1)
q.push(Item('bar'), 5)
q.push(Item('spam'), 4)
q.push(Item('grok'), 1)

参考文档:《python cookbook(第3版)高清中文完整版(###).pdf》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值