队列是什么(先进先出 FIFO)
队列就像排队买奶茶:先来的人先买到,后来的人排到队尾。这种规则叫先进先出(FIFO)。在计算机里,队列是一种线性数据结构,只允许在一端(队尾)添加元素,在另一端(队头)移除元素。
核心操作:enqueue / dequeue / peek
- enqueue(入队):在队尾添加一个元素,就像新顾客排到队伍最后面。
- dequeue(出队):移除队头的元素,并返回它,就像队伍最前面的人买到奶茶离开。
- peek(查看队头):只返回队头元素但不移除,相当于看一眼谁在队伍最前面。
普通队列的空间浪费问题
如果用数组实现普通队列,每次出队后队头指针后移,被移除的位置就空着无法再用。随着多次入队出队,数组前面会留下大量空闲空间,而后面可能已满,导致无法继续入队——这就是“假溢出”,造成空间浪费。
环形队列怎么省空间
环形队列把数组首尾相连,当队尾到达数组末尾时,下一个位置绕回到开头。这样,之前出队空出的位置可以被重新利用,避免了空间浪费。实现时通常用两个指针(队头、队尾)和取模运算来循环移动。
典型应用与复杂度
| 应用场景 | 说明 |
|---|---|
| BFS(广度优先搜索) | 按层遍历图或树,用队列保存待访问节点 |
| 消息队列 | 异步处理任务,生产者入队,消费者出队 |
| CPU 任务调度 | 先来先服务(FCFS)调度算法 |
时间复杂度:enqueue、dequeue、peek 均为 O(1)。空间复杂度:存储 n 个元素需要 O(n) 空间。