[PY3]——實現一個優先順序佇列

Jelly_lyj發表於2017-03-18
import heapq
class PriorityQueue:
    def __init__(self):
        self._queue=[]
        self._index=0

    def push(self,item,priority):
        heapq.heappush(self._queue,(-priority,self._index,item))
        self._index+=1

    def pop(self):
        return heapq.heappop(self._queue)[-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'),2)
q.push(Item('grok'),1)

print(q.pop())
print(q.pop())
print(q.pop())
print(q.pop())

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

 

參考文章

cookbook-python3-1.5-實現一個優先順序佇列

淺談演算法和資料結構: 五 優先順序佇列與堆排序

heap模組和堆排序

相關文章