数据结构:栈
栈是 OI 中常用的一种线性数据结构。请注意,本篇博客主要讲的是栈这种数据结构,而非程序运行时的系统栈/栈空间。
栈的修改与访问是按照后进先出的原则进行的,因此栈通常被称为是后进先出(last in first out)表,简称 LIFO 表。
使用数组模拟栈
1 | int st[N]; |
C++ STL中的栈
C++ 中的 STL 也提供了一个容器 std::stack,使用前需要引入 stack 头文件。
STL 中对 stack 的定义:
1 | // clang-format off |
T为 stack 中要存储的数据类型。
Container为用于存储元素的底层容器类型。这个容器必须提供通常语义的下列函数:
back()push_back()pop_back()STL 容器
std::vector、std::deque和std::list满足这些要求。如果不指定,则默认使用std::deque作为底层容器。
STL 中的 stack 容器提供了一众成员函数以供调用,其中较为常用的有:
- 元素访问
st.top()返回栈顶
- 修改
st.push()插入传入的参数到栈顶st.pop()弹出栈顶
- 容量
st.empty()返回是否为空st.size()返回元素数量
此外,std::stack 还提供了一些运算符。较为常用的是使用赋值运算符 = 为 stack 赋值,示例:
1 | // 新建两个栈 st1 和 st2 |