#创作计划# 以小学生角度看队列
2025-07-30 16:10:14
发布于:浙江
一、什么是队列?
- 队列就像生活中排队买冰淇淋的队伍 ——先来的人先买到,后来的人只能排后面,买完的人从前面离开。这种 “先进先出”(First In First Out,简称 FIFO)的规则,就是队列的核心特点。
我们可以画一个简单的队列示意图:
[队头] → [元素1] → [元素2] → [元素3] → [队尾]
最先来 中间来 最后来
最先走
- 队头:队伍的最前面,第一个离开的位置。
- 队尾:队伍的最后面,新元素加入的位置。
- 操作规则:新元素从队尾加入(叫 “入队”),元素从队头离开(叫 “出队”)。
二、队列的基本操作
就像排队时有 “加入队伍”“离开队伍”“看前面是谁” 这些动作,队列也有几个核心操作:
-
入队:新元素从队尾加入队列。
-
出队:队头的元素离开队列。
-
查看队头:看一眼队头的元素是谁(不拿走)。
-
判空:检查队列里有没有元素(队伍是不是空的)。
-
大小:查看队列里有多少个元素(队伍有多长)。
三、用 C++ 实现队列
在 C++ 里,我们可以直接用标准库的queue
(已经帮我们写好了队列的功能),也可以自己用数组实现一个简单的队列。
- 用标准库
queue
(简单直接)
#include <iostream>
#include <queue> // 引入队列库
using namespace std;
int main() {
// 定义一个存放整数的队列,就像创建一个"整数队伍"
queue<int> q;
// 1. 入队(往队尾加元素)
q.push(10); // 队伍:[10]
q.push(20); // 队伍:[10, 20]
q.push(30); // 队伍:[10, 20, 30](队头10,队尾30)
cout << "入队后,队列大小:" << q.size() << endl; // 输出3
// 2. 查看队头元素
cout << "当前队头元素:" << q.front() << endl; // 输出10
// 3. 出队(队头元素离开)
q.pop(); // 10离开,队伍:[20, 30]
cout << "出队后,队头元素:" << q.front() << endl; // 输出20
// 4. 循环出队,直到队列为空
while (!q.empty()) { // 检查队列是否为空
cout << "出队元素:" << q.front() << endl;
q.pop();
}
cout << "最后队列是否为空:" << (q.empty() ? "是" : "否") << endl; // 输出"是"
return 0;
}
- 自己用数组实现队列
#include <iostream>
using namespace std;
const int MAX_SIZE = 100; // 队列最大容量
class MyQueue {
private:
int arr[MAX_SIZE]; // 用数组存元素
int front; // 队头位置(下标)
int rear; // 队尾位置(下标)
int size; // 当前元素个数
public:
// 构造函数:初始化队列(空队列)
MyQueue() {
front = 0;
rear = -1;
size = 0;
}
// 入队:从队尾加元素
void push(int x) {
if (size == MAX_SIZE) {
cout << "队列满了,加不进去啦!" << endl;
return;
}
rear = (rear + 1) % MAX_SIZE; // 循环利用数组(避免越界)
arr[rear] = x;
size++;
}
// 出队:从队头删元素
void pop() {
if (empty()) {
cout << "队列是空的,没法删!" << endl;
return;
}
front = (front + 1) % MAX_SIZE; // 队头后移
size--;
}
// 查看队头元素
int front() {
if (empty()) {
cout << "队列是空的,没有元素!" << endl;
return -1;
}
return arr[front];
}
// 判空
bool empty() {
return size == 0;
}
// 查看大小
int size() {
return size;
}
};
// 测试我们自己的队列
int main() {
MyQueue q;
q.push(1);
q.push(2);
q.push(3);
cout << "队列大小:" << q.size() << endl; // 输出3
cout << "队头元素:" << q.front() << endl; // 输出1
q.pop();
cout << "出队后队头:" << q.front() << endl; // 输出2
while (!q.empty()) {
cout << "出队:" << q.front() << endl;
q.pop();
}
return 0;
}
四、队列的 “循环” 小技巧
上面自己实现的队列用了(rear + 1) % MAX_SIZE
这样的写法,这是为了让数组 “循环起来”。比如队列满了之后,如果前面的元素出队了,后面还能继续加元素,就像一个环形的队伍:
初始:[1, 2, 3, _, _] (front=0, rear=2)
出队1后:[_, 2, 3, _, _] (front=1, rear=2)
再入队4:[4, 2, 3, _, _] (front=1, rear=0,因为(2+1)%5=0)
这样就不会浪费数组前面的空位置啦!
求赞!!!
全部评论 4
d
昨天 来自 浙江
0d
昨天 来自 浙江
0@AC君能加精吗,多谢!
昨天 来自 浙江
0ddd
昨天 来自 浙江
0
有帮助,赞一个