为什么优先级队列不能像普通队列一样缠绕?

时间:2018-12-24 11:13:32

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

我知道,为了提高效率,Queues使用wrap around method可以避免在删除元素的所有时间里都将所有内容移到下移。

但是,我不明白为什么Priority Queues不能像普通队列一样环绕。以我的观点,优先级队列与Stack的行为比队列更相似,这怎么可能?

1 个答案:

答案 0 :(得分:1)

最常见的优先级队列实现是binary heap,它不能从环绕中受益。您可以创建在循环缓冲区中实现的优先级队列,但是会降低性能。

要记住,优先级队列是一种抽象的数据结构,这一点很重要。它定义了操作,但没有定义实现。您可以将优先级队列实现为二进制堆,排序数组,未排序数组,二叉树,跳过列表,链接列表等。实现优先级队列的方式有很多。

另一方面,二进制堆是优先级队列抽象数据类型的特定实现。

关于堆栈与队列:实际上,堆栈和队列只是优先级队列的特化。如果将时间作为优先级,那么我们所谓的队列(FIFO数据结构)实际上就是优先级队列,其中最早的项是最高优先级。堆栈(LIFO数据结构)是优先级队列,其中最新项是最高优先级。