0
点赞
收藏
分享

微信扫一扫

【模板】队列

weipeng2k 2022-03-12 阅读 47

【模板】队列

先来介绍一下队列,队列是一个先进先出的数据结构,就像日常生活中的排队一样。

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; }
};
举报

相关推荐

0 条评论