232. 用栈实现队列 - 力扣(LeetCode)
用入队栈和出队栈来模拟队列,入队时正常入栈即可,出队时,将栈内元素以栈的方式放入到另一个栈中,再将出队栈出栈即可。
显示队头元素,可以当作出队,此时可以复用出队函数,由于采用出队栈,所以将出队元素放入出队栈中即可复原。
class MyQueue {
public:
stack<int> sin;//入队所用的栈
stack<int> sout;//出队所用的栈
MyQueue() {
}
void push(int x) {
sin.push(x);
}
int pop() {
//将入队栈中的元素放入出对栈中
if(sout.empty()){
while(!sin.empty()){
sout.push(sin.top());
sin.pop();
}
}
int res = sout.top();
sout.pop();
return res;
}
int peek() {
int res = this->pop();
sout.push(res);//将出栈元素放回
return res;
}
bool empty() {
return sin.empty() && sout.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();
*/