1 定义
队列是一种特殊的线性表,具有先进先出和后进先出的性质。只允许一端进行插入操作,另一端进行删除操作的线性数据结构
- 队头
- 队尾
2 性质
先进先出,First In First Out, FIFO
3 操作
,永远指向队列的开头的第一个元素的位置 ,永远指向队列的结尾的最后一个元素的后面一个位置
也就是
3.1 创建队列
const int maxn = 1e5+5; //队列的最大容量
int que[maxn]; //队列的存储空间
int head= 0, tail = 0; //队头和队尾
3.2 基本操作
- 插入元素
void push (int n){
que[tail++] = n; //为什么是tail++,不是++tail?
}
- 删除元素
void pop() {
head++;
}
- 获得队列中第一个元素
int front() {
return que[head];
}
- 获得队列中最后一个元素
int back() {
return que[tail-1];
}
- 判断队列是否为空
bool empty() {
return head == tail;
}
- 获得队列中元素的个数
int size() {
return tail-head;
}
4 模板
template<typename T = int,int siz = maxn>
struct myqueue{
T a[siz+5];
//tail 指向最后一个元素后面一个位置
//head 指向第一个元素
int head = 0,tail=0;
void clear() { head =tail = 0;}
void push(T b) { a[tail++] = b;}
void pop(){head++;}
void pop_back(){tail--;}
T front() { return a[head];}
T back() { return a[tail-1];}
bool empty() { return head == tail;}
int size() { return tail-head;}
};
5 练习
- luogu P1540: [NOIP 2010 提高组] 机器翻译
- luogu P1090: [NOIP 2004 提高组] 合并果子 数学归纳法,数学直觉
- noi_openjudge ch0304-2406: Card Stacking 环形队列,模拟,USACO December 2007 Bronze
- noi_openjudge ch0304-2729: Blah数集 神奇证明,数学直觉,暴力验证
- leetcodecn implement-stack-using-queues: 用队列实现栈
-
- 移掉 K 位数字(https://leetcode.cn/problems/remove-k-digits/description/) TODO 单调栈
6 相关题解
暂无相关题解