B3614 【模板】栈

解题思路

这道题目要求我们实现一个栈数据结构,并支持四种基本操作:push(入栈)、pop(出栈)、query(查询栈顶)和size(查询栈大小)。解题的关键在于正确理解栈的先进后出特性,并处理各种边界情况(如空栈时的操作)。

  1. 栈的特性:栈是一种LIFO(后进先出)的数据结构,最后压入的元素会最先弹出。

  2. 操作处理:

    • push:直接将元素压入栈顶

    • pop:需要检查栈是否为空,不为空才能弹出

    • query:需要检查栈是否为空,不为空才能查询栈顶

    • size:直接返回栈中元素数量

  3. 边界处理:当栈为空时,pop和query操作需要输出特定提示信息

#include<bits/stdc++.h>
#define ll unsigned long long  // 定义无符号长整型别名
using namespace std;
const int N = 2e9 + 10,inf = 0x3f3f3f3f;  // 定义常量和无穷大值

int main()
{
    int t; cin >> t;  // 读取测试用例的数量
    while(t--)  // 处理每个测试用例
    {
        stack<ll> s;  // 创建一个栈,存储无符号长整型数据
        string op;    // 存储操作命令
        ll n,x;       // n:操作次数,x:push操作的值
        
        cin >> n;      // 读取当前测试用例的操作次数
        for(int i = 1; i <= n; i++)  // 处理每个操作
        {
            cin >> op;  // 读取操作类型
            if(op == "push") 
            {
                cin >> x;  // 读取要push的值
                s.push(x);  // 将值压入栈顶
            }
            else if(op == "pop")
            {
                if(s.size()) s.pop();  // 栈不为空则弹出栈顶
                else cout << "Empty" << endl;  // 栈为空则输出Empty
            }
            else if(op == "query")
            {
                if(s.size()) cout << s.top() << endl;  // 栈不为空则输出栈顶元素
                else cout << "Anguei!" << endl;       // 栈为空则输出Anguei!
            }
            else if(op == "size") 
            {
                cout << s.size() << endl;  // 输出当前栈的大小
            }
        }
    }    
    return 0;
}

 

posted @ 2025-07-21 19:19  CRt0729  阅读(34)  评论(0)    收藏  举报