模拟栈
栈概述
栈是先进后出,可以想想叠积木,最下面得最先放,但是最后才能出来
详细的,网上搜数据结构栈相关操作
手写栈(表等)的优势在于效率高,一般的算法竞赛里是不开优化的,$stl$效率较低
栈的常用操作有入栈,判断是否为空,返回栈顶元素和出栈四种操作
模板使用数组下标是从$1$开始的,位置$0$不用于存储
// tt表示栈顶
int stk[N], tt = 0;
// 向栈顶插入一个数
stk[ ++ tt] = x;
// 从栈顶弹出一个数
tt -- ;
// 栈顶的值
stk[tt];
// 判断栈是否为空
if (tt > 0)
{
}
代码
#include <iostream>
using namespace std;
const int N = 100010;
int m;
int stk[N], tt;
int main()
{
cin >> m;
while (m -- )
{
string op;
int x;
cin >> op;
if (op == "push")
{
cin >> x;
stk[ ++ tt] = x;
}
else if (op == "pop") tt -- ;
else if (op == "empty") cout << (tt ? "NO" : "YES") << endl;//三目运算符
else cout << stk[tt] << endl;
}
return 0;
}