首页 > 解决方案 > 为什么优先级队列不能像普通队列一样环绕?

问题描述

我知道为了提高效率,队列使用wrap around 方法,以避免在我们删除元素时一直向下移动所有内容。

但是,我不明白为什么优先队列不能像普通队列一样环绕。在我看来,优先队列与堆栈的行为比队列更相似,这怎么可能?

标签: data-structuresstackqueuepriority-queueabstract-data-type

解决方案


最常见的优先级队列实现是二进制堆,它不会从环绕中受益。您可以创建一个在循环缓冲区中实现的优先级队列,但性能会受到影响。

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

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

至于堆栈与队列:实际上,堆栈和队列只是优先级队列的特化。如果将时间视为优先级,那么我们所说的队列(一种先进先出的数据结构),实际上就是一个优先级队列,其中最旧的项是最高优先级。堆栈(LIFO 数据结构)是一个优先级队列,其中最新的项目具有最高优先级。


推荐阅读