Unverified Commit fe146d9b authored by 心旷神怡's avatar 心旷神怡 Committed by GitHub
Browse files

Merge pull request #462 from 24OI/i-Yirannn-patch-2

Update stack.md
parents c88c3f4a f011f528
Loading
Loading
Loading
Loading
+57 −2
Original line number Diff line number Diff line
栈,英文名是 stack, C++ STL 中有 [std::stack](https://en.cppreference.com/w/cpp/container/stack),不过一般都直接用数组模拟一个栈,也十分方便。
## 栈

先进入栈的元素一定后出栈
栈是 OI 中常用的一种线性数据结构,请注意,本文主要讲的是栈这种数据结构, 而非程序运行时的系统栈 / 栈空间

栈遵循 FILO 的规则,即 Fist in Last out 先进后出。

我们可以方便的使用数组来模拟一个栈, 如下 :

```cpp
int stk[N];
// 这里使用 stk[0]( 即 *stk ) 代表栈中元素数量,同时也是栈顶下标
// 压栈 :
stk[++*stk] = var1;
// 取栈顶 :
int u = stk[*stk];
// 弹栈 :注意越界问题, *stk == 0 时不能继续弹出
if(*stk) --*stk;
// 清空栈
*stk = 0;
```

同时 STL 也提供了一个方法 `std :: stack`

```cpp
#include <stack>
// stack 构造 :
1. stack<Typename T> s;
2. stack<Typename T, Container> s;
/* 与绝大多数 STL 所需要的容器一样, stack 的 Container 也需要满足有如下接口 :
 * back()
 * push_back()
 * pop_back()
 * 标准容器 std :: vector / deque / list 满足这些要求
 * 如使用 1 方式构造,默认容器使用 deque
 */
```

`std :: stack` 支持赋值运算符 `=`

元素访问 :

`s.top()` 返回栈顶

容量 :

`s.empty()` 返回是否为空

`s.size()` 返回元素数量

修改 :

`s.push()` 插入传入的参数到栈顶

`s.pop()` 弹出栈顶

其他运算符 :

按照字典序比较两个 `stack` 的值。