本文已参与「新人创作礼」活动,一起开启掘金创作之路。
栈与队列(数组模拟)
栈
先进后出,先插入的元素后被弹出。类似一个桶状。
#include <iostream>
using namespace std;
const int N = 100010;
//stk是栈,tt是栈顶下标,下标从0开始还是1开始看自己习惯
int stk[N], tt;
//栈顶加一个新元素
stk[++t] = x;
//删除,栈顶下标--
tt--;
//判断是否为空
if(tt > 0) not empty
else empty
//取出栈顶
stk[tt];
队列
先进先出,先进的元素先出。类似排队。
#include <iostream>
using namespace std;
const int N = 100010;
//hh表示队头,tt表示队尾,队尾插入,队头弹出
int q[N], hh, tt = -1;
//插入元素
q[++tt] = x;
//弹出元素
hh++;
//判断是否为空
if(hh <= tt) not empty
else empty
//取出队头元素
q[hh];
STL
STL栈
stack是一种后进先出的容器结构,准确来说stack并不是容器,而是一种容器适配器(对特定类封装作为其底层的容器)。
容器适配器是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能。之所以称作适配器类,是因为它可以通过适配容器现有的接口来提供不同的功能。
常见接口
| 函数说明 | 接口说明 |
|---|---|
| stack() | 构造空的栈 |
| empty() | 判断栈是否为空 |
| size() | 返回stack中的元素个数 |
| top() | 返回栈顶元素的引用 |
| push() | 将元素压入stack中 |
| pop() | 将stack栈顶的元素弹出 |
STL队列
队列是一种后进后出的容器适配器结构,标准容器类deque和list满足其要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque(双端队列)。
常见接口
| 函数说明 | 接口说明 |
|---|---|
| queue() | 构造空的队列 |
| empty() | 判断队列是否为空 |
| size() | 返回队列中元素的个数 |
| front() | 返回队头元素 |
| back() | 返回对尾元素 |
| pop() | 将队头元素出队 |