Implement a first in first out (FIFO) queue using only two stacks. The implemented queue should support all the functions of a normal queue (push, peek, pop, and empty).
Implement the MyQueue class:
void push(int x) Pushes element x to the back of the queue.
int pop() Removes the element from the front of the queue and returns it.
int peek() Returns the element at the front of the queue.
boolean empty() Returns true if the queue is empty, false otherwise.
class MyQueue {
public:
void push(int x) {
in_stk.push(x);
}
int pop() {
peek();
const int val = out_stk.top();
out_stk.pop();
return val;
}
int peek() {
if (out_stk.empty())
while (!in_stk.empty())
out_stk.push(in_stk.top()), in_stk.pop();
return out_stk.top();
}
bool empty() {
return in_stk.empty() && out_stk.empty();
}
private:
stack<int> in_stk;
stack<int> out_stk;
};