题解:AcWing 828 模拟栈

【题目来源】

AcWing:828. 模拟栈 - AcWing题库

【题目描述】

实现一个栈,栈初始为空,支持四种操作:

  1. push x – 向栈顶插入一个数 \(x\)
  2. pop – 从栈顶弹出一个数;
  3. empty – 判断栈是否为空;
  4. query – 查询栈顶元素。

现在要对栈进行 \(M\) 个操作,其中的每个操作 \(3\) 和操作 \(4\) 都要输出相应的结果。

【输入】

第一行包含整数 \(M\),表示操作次数。

接下来 \(M\) 行,每行包含一个操作命令,操作命令为 push xpopemptyquery 中的一种。

【输出】

对于每个 emptyquery 操作都要输出一个查询结果,每个结果占一行。

其中,empty 操作的查询结果为 YESNOquery 操作的查询结果为一个整数,表示栈顶元素的值。

【输入样例】

10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty

【输出样例】

5
5
YES
4
NO

【解题思路】

image

【算法标签】

《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
posted @ 2026-02-21 19:25  团爸讲算法  阅读(1)  评论(0)    收藏  举报