你能设计一个像队列一样的数据结构,包含'enqueue','dequeue‘,'minimum’和'maximum‘吗?我知道有一种方法可以使用两个堆栈分别找到最小值和最大值来创建一个队列,但是如何同时获得这两个值呢?
谢谢
发布于 2012-09-17 06:15:05
使用标准容器,像std::set
这样的完全有序的数据结构将提供对这两个极端的访问,例如使用*s.begin()
和*s.rbegin()
。如果您有多个具有相同优先级的对象,则可能需要以任意方式断开连接,或者使用std::multiset
。
大多数实现可能会使用某种形式的red-black tree来实现这样的集合。由于数据结构将始终保持排序,因此asymptotic performance可能比常规的单端heap-based priority queue提供的性能更差,但对于许多应用程序来说,差别并不重要,因此应该避免实现自定义数据结构的工作。
发布于 2012-09-17 05:36:22
使用优先级队列!
C++ STL
#include<queue>
优先级队列通常由二进制堆实现。但它不能同时保持最大值和最小值。@_@
也许平衡搜索树,如AVL,Splay,或红黑树应该是更好的选择。
发布于 2012-09-18 14:55:38
通常,priority queue是使用某种heap structure实现的。有一种称为min-max heap的变体,它允许恒定时间访问maximum和minimum元素。已经有a question要求这样的最小-最大堆的C++实现。它的答案也应该对你有用。
的最先提到了最小-最大堆,而的指出了堆栈溢出的实现问题。
https://stackoverflow.com/questions/12452737
复制相似问题