一、队列的定义
队列(Queue)是一种线性数据结构,遵循 FIFO(First In First Out,先进先出) 原则。就像现实中的排队,先进入队列的元素会先被处理,后进入的元素后处理。例如,打印任务排队时,先提交的任务先打印。
二、队列的基本操作
- 入队(Enqueue):将元素添加到队列末尾。
定义:将元素添加到队列的末尾(队尾)。
queue<int> q;
q.push(10); // 入队 10 → 队列:[10]
q.push(20); // 入队 20 → 队列:[10, 20]
实现逻辑:
- 数组实现:尾指针
rear
后移,将元素放入rear
位置。 - 链表实现:创建新节点,修改尾指针的
next
指向新节点。
时间复杂度:数组 / 链表:O (1)(均摊)。
- 出队(Dequeue):从队列头部移除并返回元素。
定义:移除并返回队列头部(队头)的元素。
int first = q.front(); // 获取队头元素 10
q.pop(); // 出队 → 队列:[20]
实现逻辑:
- 数组实现:头指针
front
后移,若队列空则报错。 - 链表实现:保存头节点值,删除头节点,修改头指针。
- 取队头元素:获取队列头部元素,但不删除它。
-
定义:获取队列头部元素,但不删除它。
int head = q.front(); // 获取队头元素 10 → 队列仍为 [10, 20]
实现逻辑:
- 数组实现:直接返回
arr[front]
。 - 链表实现:返回头节点的值。
时间复杂度:数组 / 链表:O (1)
- 判断队列是否为空:检查队列中是否有元素。
定义:检查队列中是否没有元素。
if (q.