请用栈实现一个队列,支持如下四种操作:
- push(x) – 将元素x插到队尾;
- pop() – 将队首的元素弹出,并返回该元素;
- peek() – 返回队首元素;
- empty() – 返回队列是否为空;
class MyQueue {
public:
stack<int> stk,cache;
MyQueue() {
}
/向队列压入元素
void push(int x) {
stk.push(x);
}
/因为队列是“先进先出”,而栈是“后进先出”,我们只需要一个辅助栈,将主站中的元素全压入辅助栈中,此时辅助栈顶元素就是主栈栈底元素(先进的元素)。切记在每一步进行copy操作后要再进行一次copy将主栈剩余元素还原并清空辅助栈/
void copy(stack<int>& a,stack<int>& b){
while(a.size()){
b.push(a.top());
a.pop();
}
}
/删除队头元素
int pop() {
int x;
copy(stk,cache);
x=cache.top();
cache.pop();
copy(cache,stk);
return x;
}
/访问队头元素
int peek() {
copy(stk,cache);
int x = cache.top();
copy(cache,stk);
return x;
}
/检查队列是否为空
bool empty() {
return stk.empty();
}
};