B3614 【模板】栈
解题思路
这道题目要求我们实现一个栈数据结构,并支持四种基本操作:push(入栈)、pop(出栈)、query(查询栈顶)和size(查询栈大小)。解题的关键在于正确理解栈的先进后出特性,并处理各种边界情况(如空栈时的操作)。
-
栈的特性:栈是一种LIFO(后进先出)的数据结构,最后压入的元素会最先弹出。
-
操作处理:
-
push:直接将元素压入栈顶 -
pop:需要检查栈是否为空,不为空才能弹出 -
query:需要检查栈是否为空,不为空才能查询栈顶 -
size:直接返回栈中元素数量
-
-
边界处理:当栈为空时,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; }

浙公网安备 33010602011771号