当前位置: 首页 > news >正文

数据结构:队列

数据结构:队列(Queue)
—— 后端开发中最常用、最容易被忽略的“先进先出”神器

队列是数据结构中最简单却又极其重要的线性结构之一,它的核心特性只有一句话:

先进先出(FIFO - First In First Out)

就像排队买奶茶:先来的先拿到,先排队的人先走。

1. 队列的核心操作(必须掌握的 5 个)

操作英文名称时间复杂度说明
入队enqueue / offerO(1)从队尾添加元素
出队dequeue / pollO(1)从队首移除并返回元素
查看队首peek / frontO(1)只看队首元素,不移除
判断空isEmptyO(1)判断队列是否为空
获取长度sizeO(1)返回当前队列中的元素个数

注意:好的队列实现中,上面所有操作都应该是 O(1) 的。

2. 队列的几种常见实现方式对比(2025-2026面试最常问)

实现方式底层结构入队复杂度出队复杂度特点与适用场景推荐指数
顺序队列(数组)固定大小数组O(1)O(n)简单,但出队效率低(需前移元素)★★☆☆☆
循环队列(数组)固定/动态数组+头尾指针O(1)O(1)最高效,空间利用率高(最推荐)★★★★★
链表队列单向链表O(1)O(1)空间动态扩展,无上限,内存不连续★★★★☆
双端队列(Deque)双向链表/数组O(1)O(1)头尾都可进出(Java LinkedList/ArrayDeque)★★★★☆
优先队列(PriorityQueue)堆(二叉堆)O(log n)O(log n)不是严格的FIFO,按优先级出队★★★☆☆

结论
日常开发中 90% 的队列需求,用循环队列(数组实现)或链表队列就够了。
性能要求极高或需要动态扩容 → 优先用循环队列(带动态扩容)。

3. 最经典的循环队列实现(Java版,面试常考)

publicclassCircularQueue{privateint[]data;privateintfront;// 指向队首元素privateintrear;// 指向队尾下一个空位privateintsize;// 当前元素个数privateintcapacity;publicCircularQueue(intk){capacity=k;data=newint[k];front=0;rear=0;size=0;}publicbooleanenQueue(intvalue){if(isFull()){returnfalse;}data[rear]=value;rear=(rear+1)%capacity;size++;returntrue;}publicbooleandeQueue(){if(isEmpty()){returnfalse;}front=(front+1)%capacity;size--;returntrue;}publicintFront(){if(isEmpty())return-1;returndata[front];}publicintRear(){if(isEmpty())return-1;returndata[(rear-1+capacity)%capacity];}publicbooleanisEmpty(){returnsize==0;}publicbooleanisFull(){returnsize==capacity;}}

关键点记忆口诀
“rear 永远指向下一个空位”
“满的判断:size == capacity”
“空的判断:size == 0”
“取尾元素:(rear-1 + capacity) % capacity”

4. 队列的经典应用场景(后端最常遇到)

场景队列作用典型技术选型
消息队列异步解耦、削峰填谷RabbitMQ / Kafka / Redis List
任务队列定时任务、延时任务、异步处理DelayQueue / Redis ZSET
BFS(广度优先搜索)层序遍历、求最短路径LinkedList 作为队列
滑动窗口最大值维护窗口内最大值双端队列(Deque)
生产者-消费者模型线程间通信BlockingQueue(ArrayBlockingQueue)
请求缓冲池高并发场景限流、缓冲请求LinkedBlockingQueue
打印机任务队列先来先服务顺序队列

5.后端面试最常考的队列相关问题(建议全部手写)

  1. 用两个栈实现队列(经典)
  2. 用队列实现栈(相对少见)
  3. 滑动窗口最大值(双端队列)
  4. 最近请求次数(队列 + 时间戳)
  5. 设计循环队列(LeetCode 622)
  6. 设计双端队列(LeetCode 641)

6. 一句话总结(背下来就赢了)

“队列的核心就是先进先出,核心难点在于循环数组的边界处理和判空判满条件”

后端真正常用的队列:

你现在对队列最想搞清楚的是哪个部分?
是循环队列的边界判断?双端队列的实现?还是实际项目中怎么选队列?
告诉我,我可以给你更针对性的代码或案例~

http://www.jsqmd.com/news/258923/

相关文章:

  • 2026年压力容器法兰优选指南:这些厂家凭实力上榜,变压器法兰/非标法兰/不锈钢法兰/锻件,压力容器法兰工厂怎么选择 - 品牌推荐师
  • ssm428人体健康体检预约信息管理系统--论文
  • 【鸿蒙小程序】| 鸿蒙系统中的元服务创新与实践
  • 2026年电竞房家具定制厂商权威推荐榜:优选专业电竞/全屋定制/整体家居及多风格家具定制厂家 - 品牌推荐官
  • 零基础学AI大模型之Agent智能体
  • 虾皮开店需要押金吗?要交多少押金
  • 即插即用系列 | IEEE TMM 2025 SPDFusion:当语义分割成为图像融合的“导师”
  • AI的提示词专栏:小说创作 Prompt,人物设定、情节走向、对话写作
  • JBoltAI AI应用中台:重塑企业智能化的统一基座与范式
  • AI的提示词专栏:多模态 LLM(Vision-LLM)Prompt 语法
  • 全网最全9个AI论文平台,助你轻松搞定本科生论文!
  • 辽源市东丰东辽龙山西安区英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 导师严选2026一键生成论文工具TOP8:本科生毕业论文写作全攻略
  • 挂机放置类游戏开发学习 Part.3 UI布局
  • springboot+vue智慧养老手表管理系统 本系统共分为两个角色:家长,养老院管理员 功...
  • 2026年多级泵供应商权威推荐榜单:多级离心泵/污水泵/自吸泵/深井泵/化工泵源头厂家精选 - 品牌推荐官
  • 全栈贯通,实效为先:JBoltAI全栈能力集成的落地价值
  • sigmoid 函数详解(机器学习基础)
  • 使用PC浏览器devTool工具调试安卓手机h5页面
  • 赋能复杂业务自动化:JBoltAI 链式调用的控制结构设计
  • 2025年液体包装机厂家推荐榜:四川西德利自动化科技有限公司,丸剂包装机/粉剂包装机/枕式包装机/粉末包装机/圆角袋包装机/颗粒包装机/包装机/定量包装机/多列包装机厂家精选 - 品牌推荐官
  • Flutter OpenHarmony 适配:渐变按钮组件技术详解 - 教程
  • 学习进度 3
  • 2026线路板灌胶机厂家权威推荐榜单:环氧树脂灌胶机/硅胶灌胶机/手动灌胶机/半自动灌胶机/聚氨酯灌胶机源头厂家精选。 - 品牌推荐官
  • 通化市辉南柳河通化东昌二道江英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 2025年南京回收精密仪器公司权威推荐榜单:废金属收购/ 废金属回收 /高价废金属回收/ 废金属的回收 /废不锈钢废金属回收服务商精选 - 品牌推荐官
  • 白山市浑江江源临江英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 乐平市雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 2026年热门流量计选购指南:插入式涡街流量计怎么选?食用油流量计/喷嘴/柴油流量计/氧气流量计,流量计源头厂家哪家强 - 品牌推荐师
  • web入门51-60