AlgoMooc

队列

8 / 28基础内容

数据结构动画

队列

加载中
正在加载动画引擎...

本课导读

队列是排队买奶茶:队尾进、队头出,先进先出,最公平。打印排队、消息队列、BFS 都用它。

你将学到
  • enqueue / dequeue / peek 三个操作
  • 先进先出(FIFO)与栈的区别
  • 环形队列如何省空间

队列是什么(先进先出 FIFO)

队列就像排队买奶茶:先来的人先买到,后来的人排到队尾。这种规则叫先进先出(FIFO)。在计算机里,队列是一种线性数据结构,只允许在一端(队尾)添加元素,在另一端(队头)移除元素。

核心操作:enqueue / dequeue / peek

  • enqueue(入队):在队尾添加一个元素,就像新顾客排到队伍最后面。
  • dequeue(出队):移除队头的元素,并返回它,就像队伍最前面的人买到奶茶离开。
  • peek(查看队头):只返回队头元素但不移除,相当于看一眼谁在队伍最前面。

普通队列的空间浪费问题

如果用数组实现普通队列,每次出队后队头指针后移,被移除的位置就空着无法再用。随着多次入队出队,数组前面会留下大量空闲空间,而后面可能已满,导致无法继续入队——这就是“假溢出”,造成空间浪费。

环形队列怎么省空间

环形队列把数组首尾相连,当队尾到达数组末尾时,下一个位置绕回到开头。这样,之前出队空出的位置可以被重新利用,避免了空间浪费。实现时通常用两个指针(队头、队尾)和取模运算来循环移动。

典型应用与复杂度

应用场景说明
BFS(广度优先搜索)按层遍历图或树,用队列保存待访问节点
消息队列异步处理任务,生产者入队,消费者出队
CPU 任务调度先来先服务(FCFS)调度算法

时间复杂度:enqueue、dequeue、peek 均为 O(1)。空间复杂度:存储 n 个元素需要 O(n) 空间。

吴师兄提示:看到「一层层 / 最短路径」就想到队列 BFS。

学完练一练

把刚学的结构放进 LeetCode 题里用一次。

去图解题库实战