题目链接 :点击查看
题目描述 :
实现一个栈,栈初始为空,支持四种操作:
push x
– 向栈顶插入一个数 x;pop
– 从栈顶弹出一个数;empty
– 判断栈是否为空;query
– 查询栈顶元素。
现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。
输入输出格式 :
输入:
第一行包含整数 M,表示操作次数。
接下来 M 行,每行包含一个操作命令,操作命令为
push x
,pop
,empty
,query
中的一种。
输出
第一行包含整数 M,表示操作次数。
接下来 M 行,每行包含一个操作命令,操作命令为
push x
,pop
,empty
,query
中的一种。
输入输出样例 :
输入
10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty
输出
5
5
YES
4
NO
题目分析 :
本题的做法是用一个stk数组对栈进行模拟,top表示栈顶下标,根据栈的性质,从而完成栈的相关操作。比如push x操作,先将栈顶下标 ++ 后给此元素赋值,即stk[ ++ top ] = x,这样当top == 0时,表示栈为空,下标为0的元素不储存任何数据,只起到标识作用。pop操作直接将 top -- 即可,在下一次对其下一个元素赋值时,会自动附上新值。empty操作即判断top 是否 == 0,query操作即输出stk[ top ]元素的值。详见如下代码。
代码 :
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e5 + 7;
int stk[N];
int top;
int main() {
int m;
cin >> m;
while (m -- ) {
string op;
int x;
cin >> op;
if (op == "push") {
cin >> x;
stk[ ++ top] = x;
}
else if (op == "query") {
cout << stk[top] << endl;
}
else if (op == "empty") {
if (top == 0) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
else {
top -- ;
}
}
return 0;
}
----------------------------------------------------------------------------------
在此我们给出栈操作的相关模板
// tt表示栈顶
int stk[N], tt = 0;
// 向栈顶插入一个数
stk[ ++ tt] = x;
// 从栈顶弹出一个数
tt -- ;
// 栈顶的值
stk[tt];
// 判断栈是否为空
if (tt > 0)
{
}