class MyQueue {
private:
stack<int> stIn;
stack<int> stOut;
public:
MyQueue() {
}
//
void push(int x) {
//向输入栈内直接添加元素就行
stIn.push(x);
}
//remove the element from the front of the queue and return the element
int pop() {
//stout为空的时候,再从stin导入数据
if(stOut.empty()){
//由stin导入数据直到stin为空
while(!stIn.empty()){
stOut.push(stIn.top());
stIn.pop();
}
}
int result = stOut.top();
stOut.pop();
return result;
}
//get the front element
int peek() {
int res = this->pop();
stOut.push(res);
return res;
}
//return whether the queue is empty
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();
*/
思路:
用两个栈实现队列,一个输入栈,一个输出栈
对于实现队列的push函数而言,只要把stin栈的元素依次入队列就行
对于实现队列的pop函数而言,当stout不为空的时候,把stin的元素依次放入stout中,直到stin为空,再从stout依次出栈
对于peek()而言,复用pop()函数,别忘把这个弹出来的元素加回去,返回这个元素