如何使用优先级队列实现堆栈?

How to implement a stack using a priority queue?

优先级队列用于实现存储字符的栈。

Push(C) 用于实现 Insert(Q,C,K),其中 K 是实现选择的适当键。

Pop 实现为 Delete_Min(Q) ,对于必须按什么顺序选择键的操作序列,严格递减或严格递增?

首先要说的是,优先队列和栈是两种完全不同的数据结构,有着不同的用途和应用。一个不能总是用来实现另一个。

是的,在某些情况下,可以根据另一个数据结构来定义数据结构:例如,您可以使用链表创建堆栈或队列(实际上非​​常简单),但是使用优先级队列实现堆栈将并不总是有效。为什么?

因为栈是先进后出的。您压入堆栈的最后一件事将最先弹出。堆栈的唯一工作是保持压入项的顺序不变,并以相反的顺序弹出。

然而,优先级队列总是会给你最小值(或基于实现的最大值)弹出。根据定义,优先级队列必须重新构造自身以始终保持 "heap property"。这意味着您推送的原始顺序不一定会保留。

现在,您的问题应表述为 "In what situation will a priority queue and a stack behave the same way?"

您提到您的优先级队列 pop() 将从您的队列中删除最小值,这表明您手头有一个 min-heap。在这种情况下,优先级队列中的一系列弹出与堆栈中的弹出类似的唯一情况是,所有项都按 non-increasing 顺序推送。它不必严格递减。 (考虑推动所有相同的价值观)。