【模板】队列
先来介绍一下队列,队列是一个先进先出的数据结构,就像日常生活中的排队一样。
STL-queue
C++的STL中有两个队列, q u e u e queue queue 和 d e q u e deque deque ,分别是基础的队列和双端队列(队头队尾都可以进出),下面简单介绍一下。
queue
定义
queue<...> ...;
尖括号里为元素类型。
基本操作
front():返回队头元素
back():返回队尾元素
push(x):进队
pop():队头出队
empty():检查队列是否为空,为空时为真
size():返回队列的元素个数
deque
定义
deque<...> ...;
尖括号内为元素类型。
基本操作
front():返回队头元素
back():返回队尾元素
push_front():从队头进队
push_back():从队尾进队
pop_front():从队头出队
pop_back():从队尾出队
empty():检查队列是否为空,为空时为真
size():返回队列的元素个数
无论时 q u e u e queue queue 还是 d e q u e deque deque ,操作时都要注意是否为空。
手写队列
STL中的队列用起来很方便,功能也很全,但有时需要自己实现。
我们只需用两个指针
f
f
f 和
b
b
b 表示队列的头和尾,在进/出队列的时候只需操作这两个指针就行了,同时为了节省空间,我们可以将队列写成循环的。
class queue {
private:
int Q[maxn], f, b, siz;
public:
void init() { f = 0, b = n + 1; }
int front() { return Q[f]; }
int back() { return Q[b]; }
void pop_front() { if(!--f) f = n; siz--; }
void pop_back() { if(++b == n) b = 1; siz--; }
void push_front(int x) { if(++f == n) f = 1; Q[f] = x; siz++; }
void push_back(int x) { if(--b == 0) b = n; Q[b] = x; siz++; }
bool empty() { return siz; }
int size() { return siz; }
};