栈
栈是基本的数据结构之一。
栈的特点:先进后出。
头文件为:
#include<stack>
栈的有关操作
stack<Type>s; //定义栈,Type为数据类型,例如 int,float,char等
s.push(item); //把item放到栈顶
s.top(); //返回栈顶元素,但不会删除
s.pop(); //删除栈顶的元素,但不会返回,在出栈时先top()获得栈顶元
素,再pop()删除栈顶元素
s.size(); //返回栈中元素个数
s.empty(); //检查栈是否为空,如果为空,返回ture,否则返回false
题目描述
请你实现一个栈(stack),支持如下操作:
push(x)
:向栈中加入一个数 𝑥x。pop()
:将栈顶弹出。如果此时栈为空则不进行弹出操作,输出Empty
。query()
:输出栈顶元素,如果此时栈为空则输出Anguei!
。size()
:输出此时栈内元素个数。
输入格式
本题单测试点内有多组数据。
输入第一行是一个整数 T,表示数据组数。对于每组数据,格式如下:
每组数据第一行是一个整数,表示操作的次数 n。
接下来 𝑛n 行,每行首先由一个字符串,为 push
,pop
,query
和 size
之一。若为 push
,则其后有一个整数 𝑥x,表示要被加入的数,𝑥x 和字符串之间用空格隔开;若不是 push
,则本行没有其它内容。
输出格式
对于每组数据,按照「题目描述」中的要求依次输出。每次输出占一行。
数据规模与约定
对于全部的测试点,保证1≤T,n≤106,且单个测试点内的 n 之和不超过 106,即∑n≤106。保证0≤x<2的64次方。
注意:由于数据范围过大,因此数据应定义时用unsigned long long。
代码如下
#include<bits/stdc++.h>
using namespace std;
#include<stack>
int main()
{
int n;
cin >> n;
while(n--)
{
stack<unsigned long long int>q;
int x;
string t;
cin >> x;
while(x--)
{
cin>>t;
if (t == "push")
{
unsigned long long y;
cin >> y;
q.push(y);
}
else if (t=="pop")
{
if (q.empty())
cout << "Empty"<<endl;
else
q.pop();
}
else if (t=="query")
{
if (q.empty())
cout <<"Anguei!"<<endl;
else
cout << q.top() << endl;
}
else if(t=="size")
cout << q.size() << endl;
}
}
return 0;
}