在Python 3中,我需要“优先级堆栈”数据结构(如优先级队列,但更像是LIFE之类的堆栈)。
我认识queue.PriorityQueue
,但没有发现类似queue.PriorityStack
的东西。
答案 0 :(得分:1)
最简单的方法是创建一个对象,其中包含要插入的实际数据,以及每次插入时都会递增的序列号。因此,您有一个看起来像这样的对象:
queueObject
actual_data
sequence_number
priority
要在优先级队列中插入内容时,可以使用新的序列号创建该对象。像这样:
function insert(data, priority)
obj = new queuedObject(data, priority, ++globalSequence)
pq.insert(obj)
有了它和一个自定义比较器,您可以只使用标准的Python heapq对象。只需确保比较器比较优先级和序列号即可。
如果愿意,可以使用时间戳代替序列号。无论哪种方式,假设您的比较器是正确的,这将确保优先级相同的项目按LIFO顺序出队。