题目描述
请你实现一个栈(stack),支持如下操作:
push(x)
:向栈中加入一个数 xx。pop()
:将栈顶弹出。如果此时栈为空则不进行弹出操作,输出Empty
。query()
:输出栈顶元素,如果此时栈为空则输出Anguei!
。size()
:输出此时栈内元素个数。
输入格式
本题单测试点内有多组数据。
输入第一行是一个整数 TT,表示数据组数。对于每组数据,格式如下:
每组数据第一行是一个整数,表示操作的次数 nn。
接下来 nn 行,每行首先由一个字符串,为 push
,pop
,query
和 size
之一。若为 push
,则其后有一个整数 xx,表示要被加入的数,xx 和字符串之间用空格隔开;若不是 push
,则本行没有其它内容。
输出格式
对于每组数据,按照「题目描述」中的要求依次输出。每次输出占一行。
输入输出样例
输入 #1
2 5 push 2 query size pop query 3 pop query size
输出 #1
2 1 Anguei! Empty Anguei! 0
本题本人代码用数组模拟栈,需要注意的是每一组数据输入前要把栈清空,即让 tt=0 因为栈的大小是用tt来控制的。
还需要注意本题中n的范围和x的范围,我对此使用的不是int而是unsigned long long
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
int tt;
unsigned long long sta[1000010];
void init()//栈的初始化(清空)
{
tt=0;
}
void pu(unsigned long long x)//栈顶插入x
{
sta[++tt]=x;
}
void po()//弹出栈顶,如果栈为空输出Empty
{
if(tt>0) tt--;
else printf("Empty\n");
}
void que()//输出栈顶元素,若栈为空输出Anguei!
{
if(tt>0) printf("%llu\n",sta[tt]);
else printf("Anguei!\n");
}
int size1()//返回栈中的元素个数
{
return tt;//本代码中tt的值和栈的元素个数大小相等
}
int main()
{
int t;
scanf("%d",&t);
while(t--)//t组数据
{
init();//初始化栈
int n;
scanf("%d",&n);//每一组n个操作
while(n--)
{
string s;
unsigned long long x;
cin>>s;
if(s=="push")
{
scanf("%llu",&x);
pu(x);
}
else if(s=="pop")
{
po();
}
else if(s=="query")
{
que();
}
else
{
int count=size1();
printf("%d\n",count);
}
}
}
return 0;
}
本文为个人笔记,如有题目侵权,请联系删除。