data-structures - 为什么优先级队列不能像普通队列一样环绕?
问题描述
我知道为了提高效率,队列使用wrap around 方法,以避免在我们删除元素时一直向下移动所有内容。
但是,我不明白为什么优先队列不能像普通队列一样环绕。在我看来,优先队列与堆栈的行为比队列更相似,这怎么可能?
解决方案
最常见的优先级队列实现是二进制堆,它不会从环绕中受益。您可以创建一个在循环缓冲区中实现的优先级队列,但性能会受到影响。
重要的是要记住优先级队列是一种抽象数据结构。它定义了操作,但没有定义实现。您可以将优先级队列实现为二叉堆、排序数组、未排序数组、二叉树、跳过列表、链表等。实现优先级队列的方式有很多种。
另一方面,二进制堆是优先级队列抽象数据类型的具体实现。
至于堆栈与队列:实际上,堆栈和队列只是优先级队列的特化。如果将时间视为优先级,那么我们所说的队列(一种先进先出的数据结构),实际上就是一个优先级队列,其中最旧的项是最高优先级。堆栈(LIFO 数据结构)是一个优先级队列,其中最新的项目具有最高优先级。
推荐阅读
- python - 在python中写一个计算数字总和的函数,调用多次为sum(1)(2)(3)
- github-pages - GitHub Pages 博客和 Google Search Console:按照这些步骤进行公共回购是否安全?
- linux - 尝试将 Linux 静态库与可执行文件链接时,Visual Studio 中出现 MSB012 警告
- javascript - 如何将文本区域内容保存在本地存储中
- ibm-information-server - 访问源模式名称
- windows - 创建为本地系统时对新服务的实例限制
- python-3.x - numpy 2D 数组 - 从第一列中选择第二列中具有最大值的所有值
- python - 即使使用绝对路径,Python 脚本也无法使用 os.path.exists 工具找到路径
- json - 用冒号转义 JSON_VALUE
- google-maps - Google StreetView API 从室内提取图像。如何解决?