#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int stk[N];
int hh,tt;
int main()
{
int t;
cin>>t;
while(t--)
{
char s[20];
cin>>s;
if(s[2]=='s')
{
int x;
cin>>x;
stk[++tt]=x;
}
else if(s[1]=='o')
{
tt--;
}
else if(s[0]=='e')
{
if(hh<tt) puts("NO");
else puts("YES");
}
else
{
cout<<stk[tt]<<endl;
}
}
return 0;
}
栈还是比较简单,每一次都是对栈顶进行操作,可以直接用数组把栈模拟出来
hh表示的是0,算是一个标志,tt 初始值也是0,所以使用++tt,也就是第一个使用的下标其实是1,向栈顶插入一个元素就是把tt 增加1,把元素存进数组,栈顶弹出一个元素就是把tt数值减小1,tt表示的其实是一个计数器,所以其实有没有hh是无所谓的,我改下代码,看下能不能 ac
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int stk[N];
int tt;
int main()
{
int t;
cin>>t;
while(t--)
{
char s[20];
cin>>s;
if(s[2]=='s')
{
int x;
cin>>x;
stk[++tt]=x;
}
else if(s[1]=='o')
{
tt--;
}
else if(s[0]=='e')
{
if(tt>=1) puts("NO");
else puts("YES");
}
else
{
cout<<stk[tt]<<endl;
}
}
return 0;
}
改成这样也可以ac ,所以hh有没有其实无所谓
然后是判断栈是否为空,假设栈是空的,tt一定小于1,或者说hh==tt,因为操作一定合法,所以栈为空就是tt ==0的时候
查询栈顶的元素就是输出 stk[tt]即可
非常简单