思路一:双栈模拟
两个栈:stk1 stk2
入队: 入栈stk1
出队: 如果stk2为空,则把stk1所有的出栈入栈stk2,然后再出队
队头: 也就是stk2的栈顶,如果stk2为空则把stk1所有的出栈入栈stk2,然后再取队头
为空: stk1 stk2均为空
class MyQueue {
public:
stack<int> stk1, stk2;
MyQueue() {
}
void push(int x) {
stk1.push(x);
}
int pop() {
if (stk2.empty()) {
while (!stk1.empty()) {
stk2.push(stk1.top());
stk1.pop();
}
}
int tp = stk2.top();
stk2.pop();
return tp;
}
int peek() {
if (stk2.empty()) {
while (!stk1.empty()) {
stk2.push(stk1.top());
stk1.pop();
}
}
return stk2.top();
}
bool empty() {
return stk1.empty() && stk2.empty();
}
};