Leetcode232
1.问题描述
2.解决方案
1.使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。
2.在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。
3.最后如何判断队列为空呢?如果进栈和出栈都为空的话,说明模拟的队列为空了。
class MyQueue {
private:
stack<int> s1; //入队-进的栈
stack<int> s2; //出队和选队首-选的栈
public:
MyQueue() {
}
void push(int x) {
s1.push(x);
}
int pop() {
if(s2.size()!=0) {
int t=s2.top();
s2.pop();
return t;
}
else{
while(s1.size()!=0){
s2.push(s1.top());
s1.pop();
}
int t=s2.top();
s2.pop();
return t;
}
}
int peek() {
if(s2.size()!=0) {
return s2.top();
}
else{
while(s1.size()!=0){
s2.push(s1.top());
s1.pop();
}
return s2.top();
}
}
bool empty() {
return s1.empty()&&s2.empty();
}
};