使用两个栈可以实现队列。具体步骤如下:
- 创建两个栈,一个用于入队操作,另一个用于出队操作。
- 入队操作时,将元素压入“入队栈”。
- 出队操作时,首先判断“出队栈”是否为空,如果为空,则将“入队栈”中的元素依次弹出并压入“出队栈”,然后从“出队栈”弹出元素;如果“出队栈”不为空,则直接从“出队栈”弹出元素。
class MyQueue {
private:
stack<int> inStack, outStack;
void in2out() {
while (!inStack.empty()) {
outStack.push(inStack.top());
inStack.pop();
}
}
public:
MyQueue() {}
void push(int x) {//入队
inStack.push(x);
}
int pop() {//出队
if (outStack.empty()) {
in2out();//out 为空的话,将先前入栈的元素倒着放进来,否则就直接出元素即可
}//不用再搬回去(或者swap)了,
int x = outStack.top();
outStack.pop();
return x;
}
int peek() {//查看
if (outStack.empty()) {
in2out();
}
return outStack.top();
}
bool empty() {
return inStack.empty() && outStack.empty();
}
};//链接:https://leetcode.cn/problems/implement-queue-using-stacks/solution/tu-jie-guan-fang-tui-jian-ti-jie-yong-zh-4hru/