class MyQueue {
public:
stack<int> stIn;
stack<int> stOut;
// 首先 实现这个功能需要两个栈 分为入栈和出栈 栈的定义方式如上
MyQueue() {
}
// MyQueue的压入操作 对入栈进行压入操作即可
void push(int x) {
stIn.push(x);
}
int pop() {
// 首先判空 如果出栈是空 那么就把入栈中的元素都压入出栈里
if(stOut.empty()){
// 当入栈不为空时
while(!stIn.empty()){
// 把入栈的top压入出栈
stOut.push(stIn.top());
// 把这个top弹出,便于操作下一个元素
stIn.pop();
}
}
int result = stOut.top();
stOut.pop();
// 返回值 并将出栈中最上位的弹出
return result;
}
int peek() {
// this指的是我们定义的class 也就是一个MyQueue this->pop()已经不是正常的弹出
// 而是上面自己定义的pop,其中包含了判空操作,就省去了重写的麻烦
int res = this->pop();
stOut.push(res);
return res;
}
bool empty() {
// 判空操作 两者均为空时 返回空
return stIn.empty() && stOut.empty();
}
};
图解:
参考: