题目描述
实现一个栈,栈初始为空,支持四种操作:
(1) “push x” – 向栈顶插入一个数x;
(2) “pop” – 从栈顶弹出一个数;
(3) “empty” – 判断栈是否为空;
(4) “query” – 查询栈顶元素。
现在要对栈进行M个操作,其中的每个操作3和操作4都要输出相应的结果。
输入格式
第一行包含整数M,表示操作次数。
接下来M行,每行包含一个操作命令,操作命令为”push x”,”pop”,”empty”,”query”中的一种。
输出格式
对于每个”empty”和”query”操作都要输出一个查询结果,每个结果占一行。
其中,”empty”操作的查询结果为“YES”或“NO”,”query”操作的查询结果为一个整数,表示栈顶元素的值。
数据范围
1≤M≤100000,
1≤x≤109
所有操作保证合法。
样例
输入样例:
10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty
输出样例:
5
5
YES
4
NO
算法1
(STL)
C++ 代码
#include<iostream>
#include<stack>
using namespace std;
const int N=100010;
int n;
int main(){
stack <int> stk;
cin>>n;
while(n--){
string op;
int x;
cin>>op;
if(op=="push")cin>>x,stk.push(x);
else if(op=="pop")stk.pop();
else if(op=="empty")cout<<(!stk.empty()?"NO":"YES")<<endl;
else
cout<<stk.top()<<endl;
}
return 0;
}
算法2
(模拟)
C++ 代码
#include<iostream>
using namespace std;
const int N=100010;
int stk[N],tt=0;
int m;
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
cin>>m;
while(m--){
int x;
string op;
cin>>op;
if(op=="push")
{
cin>>x;
stk[++tt]=x;
}
else if(op=="pop")tt--;
else if(op=="empty")cout<<(tt<0?"YES":"NO")<<endl;
else cout<<stk[tt]<<endl;
}
return 0;
}
Orz
算法2里面那个判空有问题呀,栈里面没有数,输出为不空
cout.tie(0);
呢?在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。所以有时候可以不用写!
if(op==”empty”)cout<<(tt<=0?”YES”:”NO”)<<endl;
这个怎么了??
他意思是tt<= 0,因为刚开始时候你的tt设为0了,如果tt初始化为-1,tt<0就对了,不过竟然都能AC。。。。。。。。
hhhh 可以用控制变量法对比一下
可以试一下样例:
1
empty
======
根据你的代码–> NO,但显然结果是–> YES
显然你这个有bug,只不过数据水