你能设计一个数据结构就像一个包含'enqueue','dequeue'''minimum'和'maximum'的队列? 我知道一种使用2个堆栈来分别查找最小值和最大值的队列的方法,但是如何同时获取两个?
由于
答案 0 :(得分:3)
使用标准容器,像std::set
这样的完全有序的数据结构将提供对两个极值的访问,例如使用*s.begin()
和*s.rbegin()
。如果您有多个具有相同优先级的对象,您可能希望以任意方式断开关系,或者使用std::multiset
代替。
大多数实现可能会使用某种形式的red-black tree来实现这样的集合。由于数据结构将始终保持排序状态,asymptotic performance可能比基于heap的常规priority queue给出的更差,但对于许多应用程序而言,差异不大这很重要,因此应该避免实现自定义数据结构的工作。
答案 1 :(得分:1)
使用优先级队列!
C ++ STL
#include<queue>
通常,优先级队列由Binary-Heap实现。但它不能同时保持最大值和最小值。 @ _ @
也许平衡搜索树,比如AVL,Splay或Red-Black Tree应该是更好的选择。
答案 2 :(得分:1)
通常使用某种priority queue来实现heap structure。有一种名为min-max heap的变体允许对最大和最小元素进行恒定时间访问。已经有a question要求C ++实现这样的最小 - 最大堆。它的答案也应该对你有用。
<{3>} This comment首先提到了最小 - 最大堆,而Paul Dixon由this comment指出了堆栈溢出的实现问题。 < / p>答案 3 :(得分:0)
数据结构是一种众所周知的结构,称为优先级队列。 队列中的每个元素都有一个关联的优先级,队列保持从高到低的排序顺序。
队列中的每个元素都必须具有优先级,并且代码必须维护订单合同。
有些STL包含优先级队列实现,但现在我看一下,我不确定整个队列是否按优先级顺序排列。