题解:AcWing 828 模拟栈
【题目来源】
AcWing:828. 模拟栈 - AcWing题库
【题目描述】
实现一个栈,栈初始为空,支持四种操作:
push x– 向栈顶插入一个数 \(x\);pop– 从栈顶弹出一个数;empty– 判断栈是否为空;query– 查询栈顶元素。
现在要对栈进行 \(M\) 个操作,其中的每个操作 \(3\) 和操作 \(4\) 都要输出相应的结果。
【输入】
第一行包含整数 \(M\),表示操作次数。
接下来 \(M\) 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。
【输出】
对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。
其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示栈顶元素的值。
【输入样例】
10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty
【输出样例】
5
5
YES
4
NO
【解题思路】

【算法标签】
《AcWing 828 模拟栈》 #栈#
【代码详解】
// 使用数组模拟
#include <bits/stdc++.h>
using namespace std;
const int N = 100010; // 定义栈的最大容量
string op; // 存储操作命令
int m; // 操作次数
int stk[N]; // 栈数组
int top; // 栈顶指针,指向当前栈顶元素的位置
int main()
{
// 输入操作次数
cin >> m;
int x; // 临时变量,用于存储输入的数字
// 循环处理每个操作
while (m--)
{
// 输入操作命令
cin >> op;
// 根据操作命令执行相应操作
if (op == "push")
{
// 入栈操作:将元素压入栈顶
cin >> x; // 输入要入栈的元素
stk[++top] = x; // 栈顶指针先加1,然后存入元素
}
else if (op == "pop")
{
// 出栈操作:弹出栈顶元素
x = stk[top--]; // 先取出栈顶元素,然后栈顶指针减1
}
else if (op == "empty")
{
// 判断栈是否为空
// 如果top不为0,栈非空,输出"NO";否则输出"YES"
cout << (top ? "NO" : "YES") << endl;
}
else
{
// 查询栈顶元素操作
cout << stk[top] << endl; // 输出栈顶元素,但不弹出
}
}
return 0;
}
【运行结果】
10
push 5
query
5
push 6
pop
query
5
pop
empty
YES
push 4
query
4
empty
NO
浙公网安备 33010602011771号