class MyQueue {
public:
stack<int> stIn;
stack<int> stOut;
MyQueue() {
}
void push(int x) {
stIn.push(x);
}
int pop() {
if (stOut.empty()) {
while (!stIn.empty()) {
stOut.push(stIn.top());
stIn.pop();
}
}
int res = stOut.top();
stOut.pop();
return res;
}
int peek() {
int res = this->pop();
stOut.push(res);
return res;
}
bool empty() {
return stIn.empty() && stOut.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
思路:如果要用栈实现队列,则需要两个栈进行操作,一个是输入栈,一个是输出栈,每次队列的输入都放到输出栈里面去,每次队列的输出时就输出输出栈,如果输出的栈为空,则把输入栈的所有元素都放到输出栈里面去,当输出栈和输出栈全空时,表示队列为空。