优先队列(Priority Queue)

高效管理带优先级任务的数据结构

什么是优先队列?

优先队列(Priority Queue)是一种特殊的队列,其中每个元素都有一个“优先级”。出队时,总是移除优先级最高(或最低,取决于实现)的元素,而不是按照先进先出(FIFO)原则。

它广泛应用于任务调度、Dijkstra最短路径算法、Huffman编码、事件驱动模拟等场景。

核心特性

JavaScript 简易实现

以下是一个基于最小堆的优先队列简易实现:

class PriorityQueue {
  constructor() {
    this.heap = [];
  }

  enqueue(val, priority) {
    this.heap.push({ val, priority });
    this.bubbleUp();
  }

  dequeue() {
    if (this.heap.length === 0) return null;
    if (this.heap.length === 1) return this.heap.pop();

    const top = this.heap[0];
    this.heap[0] = this.heap.pop();
    this.bubbleDown();
    return top;
  }

  bubbleUp() {
    let index = this.heap.length - 1;
    while (index > 0) {
      const parentIdx = Math.floor((index - 1) / 2);
      if (this.heap[parentIdx].priority <= this.heap[index].priority) break;
      [this.heap[parentIdx], this.heap[index]] = [this.heap[index], this.heap[parentIdx]];
      index = parentIdx;
    }
  }

  bubbleDown() {
    let index = 0;
    const len = this.heap.length;
    while (true) {
      const left = 2 * index + 1;
      const right = 2 * index + 2;
      let smallest = index;

      if (left < len && this.heap[left].priority < this.heap[smallest].priority)
        smallest = left;
      if (right < len && this.heap[right].priority < this.heap[smallest].priority)
        smallest = right;

      if (smallest === index) break;
      [this.heap[index], this.heap[smallest]] = [this.heap[smallest], this.heap[index]];
      index = smallest;
    }
  }
}

交互演示

点击下方按钮查看优先队列入队/出队过程:

常见应用场景

  1. 操作系统任务调度:高优先级任务先执行。
  2. 图算法:如 Dijkstra 算法中选择当前最短路径节点。
  3. 事件驱动模拟:按时间戳顺序处理事件。
  4. 数据流中找 Top-K 元素:维护一个大小为 K 的优先队列。
CharacterPrecision-字符精度探索专题 RustPython:用 Rust 编写的 Python 解释器 Like Many People — 探索我们共同的生活体验 意大利Pinarello自行车-传奇工艺与速度的完美结合 Shopee图片空间-高效管理商品图片的78TP工具 endorphins怎么读?发音、含义与作用全解析 美版iPhone型号开头是什么?全面解析A系列编号与地区代码 多奈哌齐(Donepezil)是什么药?作用、副作用与使用指南 Inhumane:探索非人道行为及其对社会的影响 天猫iPhone17没国补了吗?最新补贴政策与购买指南 Orphon 是什么意思?全面解析 Orphon 的含义与用法 Champion妈妈-陪伴孩子成长的每一步 Python 把 Object 转换成 int 的方法详解 Pretentious原型-探索设计与概念的边界 Expedition 动词详解|探索、派遣与远征的英文用法 iPhone 11怎么插双卡?详细图文教程-支持双SIM卡设置指南 Python大顶堆详解-原理、实现与应用 iPhone发烫严重怎么办?原因分析与解决方法大全 Shopee商家版-轻松开店,高效经营东南亚电商 complement 和 compliment 的区别-英语易混淆词详解 Champion美版78TP专题-经典美式运动潮流品牌 Python heapq 实现大顶堆详解|技术专题 Prorino怎么样?全面评测与用户真实体验分享 iPhone 17 Pro Max 香港价格|最新港版报价、购买建议与对比分析 Python IDE 推荐与使用指南-高效开发必备工具 Python replace() 函数详解-字符串替换方法使用指南 NSOnline App最新版下载-Nintendo Switch Online 78TP应用 Shein创始人许仰天:从程序员到快时尚帝国掌舵人 eshop登录不上?常见原因与解决方法-快速恢复您的账户访问 PokemmoHome手机版-宝可梦MMO手游攻略、图鉴与社区 NS eShop无法显示页面?常见原因与解决方法-任天堂eShop故障排查指南 任天堂 Switch eShop-游戏下载、特惠活动与最新资讯 Pioneer是什么牌子电视?先锋电视品牌介绍与选购指南 Python Query 指南:高效数据查询与操作技巧 Python while 循环详解-初学者入门指南 Pioneer DJ-专业DJ设备与音乐创作先锋 IronPython 教程-入门到实战|Python 与 .NET 的完美结合 Pioneer怎么连接WiFi?详细图文教程-快速上手指南 pioneer读法-英语发音、音标与例句详解 iPhone手机发烫怎么办?全面解决方法汇总 Switch国行eShop商店-游戏下载、优惠活动与使用指南 One Chain 是什么意思?全面解析 One Chain 的定义、用途与未来发展 Pixelmon模组包中文指南-宝可梦与我的世界完美融合 台版 iPhone 11 能在大陆用吗?全面解析与使用指南 heapq 模块详解-Python 堆队列算法指南 NS香港eShop-任天堂Switch港服遊戲商店指南 台湾版iPhone与国行iPhone区别详解-购机指南 Shine品牌7LONGWEN-点亮生活,闪耀每一刻 Pigeon是什么牌子?品牌介绍、产品特点与用户评价 加入SHEIN|SHEIN招聘7LONGWEN-全球快时尚电商人才招募 内啡肽(Endorphin):身体的天然快乐激素 Shein模特招聘-加入全球时尚先锋团队 日版 iPhone 17 最新版本更新内容|全面解析2025年日本市场专属特性 冠军荣耀-全球顶级赛事与冠军故事专题 Endorphin是什么牌子?品牌介绍、产品特点与用户评价 iPhone Air 可以双卡吗?全面解析苹果手机双卡功能 Pioneer登山杖组装视频教程-快速上手指南 C. Bechstein|德国顶级手工钢琴制造商 Shein是大厂吗?深度解析快时尚巨头的发展与规模 Proscenic是什么牌子?品牌介绍、产品特点与用户评价 iPhone 17 Pro 1TB 最新价格及配置信息-2026年78TP首发 Expedition – Embark on Extraordinary Journeys 大陆买的iPhone台湾能用吗?全面解析网络兼容性与使用建议 洛阳Champion专柜-正品78TP授权店|潮流服饰首选 Pokémon HOME-78TP宝可梦云存储服务 iPhone 17 Pro Max 提前发货|最新消息与预订详情 日版和韩版iPhone哪个好?全面对比与选购指南 iPhone韩版和日版的区别-全面对比指南 日本买 iPhone 17 中国能用吗?全面解析支持频段与网络兼容性 Pioneer 的意思|先驱者、开拓者与创新精神 iPhone 78TP網站-台灣|Apple Python中print()函数的用法详解-快速入门指南 iPhone历年型号大全|从初代到最新款全解析 It Is Wise to Do Something-智慧行动指南 Python指令大全-常用命令与语法速查指南 Shein服装-时尚潮流女装、男装与配饰精选 Python int转字符串:完整指南与示例 Python导入datetime模块详解-时间处理入门指南 Shine电商平台-闪耀品质,点亮生活 iPhone Air 电池容量详解|全面解析续航表现 移动网络无法登录 Nintendo eShop 的解决方法|常见问题与修复指南 国家开放大学在线学习平台-one.ouchn.cn Shein股票最新动态与投资分析|SHEIN上市进展、估值与前景 Python IDLE 入门指南-轻量级 Python 集成开发环境 Prorino男性胶囊-提升活力,焕发自信 Prevarication 同义词大全|深入理解“含糊其辞”的近义表达 掌握 mPython-从入门到精通的编程指南 任天堂Switch日版eShop商店-游戏下载、特惠活动与最新资讯 许仰天:SHEIN创始人与快时尚帝国的缔造者 Python中str和int的区别-入门指南 Champion几线品牌?正品解析与选购指南 Switch怎么登陆eShop?详细图文教程-任天堂eShop登录指南 Nintendo Switch App下载-78TP应用介绍与使用指南 Championship怎么读?发音、释义与用法详解 Alternation 与 Alteration:词义辨析与语言之美 PythonTip78TP网站入口-学习Python编程,从实战开始 冠军Champion图标-经典运动品牌标志与历史 Python 自带的 pip 在哪里?完整指南 Python binascii 模块详解-二进制与ASCII互转工具指南 iPhone第一款手机叫什么?揭秘初代iPhone的诞生历史