Python 3中的“优先级堆栈”(优先级队列和堆栈的混合)?

时间:2018-07-16 22:47:26

标签: python python-3.x stack priority-queue

在Python 3中,我需要“优先级堆栈”数据结构(如优先级队列,但更像是LIFE之类的堆栈)。

我认识queue.PriorityQueue,但没有发现类似queue.PriorityStack的东西。

1 个答案:

答案 0 :(得分:1)

最简单的方法是创建一个对象,其中包含要插入的实际数据,以及每次插入时都会递增的序列号。因此,您有一个看起来像这样的对象:

queueObject
    actual_data
    sequence_number
    priority

要在优先级队列中插入内容时,可以使用新的序列号创建该对象。像这样:

function insert(data, priority)
    obj = new queuedObject(data, priority, ++globalSequence)
    pq.insert(obj)

有了它和一个自定义比较器,您可以只使用标准的Python heapq对象。只需确保比较器比较优先级和序列号即可。

如果愿意,可以使用时间戳代替序列号。无论哪种方式,假设您的比较器是正确的,这将确保优先级相同的项目按LIFO顺序出队。