题目描述
请你实现一个栈(stack),支持如下操作:
push(x)
:向栈中加入一个数 xx。pop()
:将栈顶弹出。如果此时栈为空则不进行弹出操作,输出Empty
。query()
:输出栈顶元素,如果此时栈为空则输出Anguei!
。size()
:输出此时栈内元素个数。
输入格式
本题单测试点内有多组数据。
输入第一行是一个整数 TT,表示数据组数。对于每组数据,格式如下:
每组数据第一行是一个整数,表示操作的次数 nn。
接下来 nn 行,每行首先由一个字符串,为 push
,pop
,query
和 size
之一。若为 push
,则其后有一个整数 xx,表示要被加入的数,xx 和字符串之间用空格隔开;若不是 push
,则本行没有其它内容。
输出格式
对于每组数据,按照「题目描述」中的要求依次输出。每次输出占一行。
说明/提示
样例 1 解释
对于第二组数据,始终为空,所以 pop
和 query
均需要输出对应字符串。栈的 size 为 0。
数据规模与约定
提示
- 请注意大量数据读入对程序效率造成的影响。
- 因为一开始数据造错了,请注意输出的
Empty
不含叹号,Anguei!
含有叹号。
题解
#include <iostream>
#include <stack>
using namespace std;
#define MAXSIZE 100000
void push(stack<unsigned long long int>& stk, unsigned long long int x) {
stk.push(x);
}
void pop(stack<unsigned long long int>& stk) {
if (stk.empty()) cout << "Empty" << endl;
else stk.pop();
}
void query(stack<unsigned long long int>& stk) {
if (stk.empty()) cout << "Anguei!" << endl;
else cout << stk.top() << endl;
}
void size(stack<unsigned long long int>& stk) {
cout << stk.size() << endl;
}
int main(){
int T;
cin >> T;
for (int i = 1; i <= T; i++) {
stack<unsigned long long int> s;
int n;
cin >> n;
for (int j = 1; j <= n; j++) {
string a;
cin >> a;
if (a == "push") {
unsigned long long int x;
cin >> x;
push(s,x);
}
else if (a == "pop") {
pop(s);
}
else if (a == "query") {
query(s);
}
else {
size(s);
}
}
}
}
运行结果
思路
1.创建一个栈,并读取要进行的操作
2.根据题目对数据大小的要求,这里定义x时要用unsigned long long int