Python实战从入门到精通第四讲——数据结构与算法2之实现一个优先级队列

实现一个优先级队列

import heapq

class PriorityQueue:
    def __init__(self):
        self._queue = []
        self._index = ()
    
    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'),4)
q.push(Item('grok'),1)
q.pop()
q.pop()
q.pop()
q.pop()

######输出
Item('bar')
Item('spam')
Item('foo')
Item('grok')

可以看到第一个pop返回优先级最高的元素。

在代码中队列包含了一个(-priority,index,item)的元组,优先级为负数的目的是使得元素按照优先级从高到低排序,这个跟普通的按优先级从低到高排序的堆排序恰好相反。

发布了333 篇原创文章 · 获赞 170 · 访问量 50万+

猜你喜欢

转载自blog.csdn.net/qq_32146369/article/details/104209352