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

时间:2016-01-27 17:02:55

标签: data-structures stack priority-queue abstract-data-type

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

Push(C)用于实现Insert(Q,C,K),其中K是实施选择的相应密钥。

Pop实现为Delete_Min(Q),用于按键的顺序选择,严格减少或严格增加的一系列操作?

1 个答案:

答案 0 :(得分:2)

首先让我说优先级队列和堆栈是两个完全不同的数据结构,具有不同的用途和应用程序。不能总是用来实现另一个。

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

因为堆栈是最后输出的。你在堆栈上推送的最后一件事将是第一件要推出的东西。堆栈的唯一工作是保持推送项目的顺序完整,并以相反的顺序弹出。

然而,优先级队列将始终为您提供pop的最小值(或基于实现的最大值)。优先级队列必须-by definition-重组自身以始终保持“堆属性”。这意味着您推送的原始订单不一定会被保留。

现在,您的问题应该被表述为“在什么情况下优先级队列和堆栈的行为方式相同?”

您提到您的优先级队列pop()将从队列中删除最小值,表示您手头有一个最小堆。在这种情况下,优先级队列中的一系列弹出窗口将类似于堆栈的弹出窗口的唯一情况是,当所有项目都以非递增顺序推送时。它不必严格减少。 (考虑推动所有相同的价值观)。