优先队列数据结构

时间:2010-11-20 03:56:02

标签: data-structures priority-queue

假设我有一个优先级队列,它按递增顺序删除元素,并且存储在此队列中的是元素1, 1, 3, 0, 1。增加的顺序为0,然后是1,然后是3,但有三个元素1

当我致电remove时,它会先删除0,但如果我再次拨打remove,它会同时删除所有三个1,或者我需要分别致电remove三次以删除所有1元素。

在这样的优先级队列上调用remove会删除所有相同最小值的元素,还是每次调用只删除一个元素?

2 个答案:

答案 0 :(得分:3)

在优先级队列中,删除操作通常会删除包含最大值的单个记录。所以在你的情况下,它将是第二种选择。删除顺序无法保证。任何具有“最大”值的键都将被删除。另外,未排序的数组是实现优先级队列的错误数据结构。您通常会使用堆数据结构来获取插入和删除时的O(log(n))保证。

答案 1 :(得分:0)

典型的堆实现总是会重新使用树,因此它会删除0,1,1,1和3,因为1会在重新调整过程中被推送到根目录。

我错了吗?

编辑:你的案例是一个小堆