用栈实现队列
思路
将一个栈当作输入栈,用于压入 push\texttt{push}push 传入的数据;另一个栈当作输出栈,用于 pop\texttt{pop}pop 和 peek\texttt{peek}peek 操作。
每次 pop\texttt{pop}pop 或 peek\texttt{peek}peek 时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。
class MyQueue {
private:
stack<int> inStack, outStack;
void inToOut(){
while(!inStack.empty()){
outStack.push(inStack.top());
inStack.pop();
}
}
public:
MyQueue() {
}
void push(int x) {
inStack.push(x);
}
int pop() {
if(outStack.empty()){
inToOut();
}
int x = outStack.top();
outStack.pop();
return x;
}
int peek() {
if(outStack.empty()){
inToOut();
}
return outStack.top();
}
bool empty() {
return inStack.empty() && outStack.empty();
}
};