Implement the following operations of a stack using queues.


  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • empty() -- Return whether the stack is empty.

Notes:


  • You must use only standard operations of a queue -- which means only ​​push to back​​​, ​​peek/pop from front​​​, ​​size​​​, and ​​is empty​​ operations are valid.
  • Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
  • You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).

 

Update (2015-06-11):

The class name of the Java function had been updated to MyStack instead of Stack.



1 class Stack {
2 private:
3 queue <int> q_1;
4 queue <int> q_2;
5 public:
6 // Push element x onto stack.
7 void push(int x) {
8 if(q_1.empty())
9 q_1.push(x);
10 else
11 {
12 while(!q_1.empty())
13 {
14 q_2.push(q_1.front());
15 q_1.pop();
16 }
17 q_1.push(x);
18 while(!q_2.empty())
19 {
20 q_1.push(q_2.front());
21 q_2.pop();
22 }
23 }
24 }
25
26 // Removes the element on top of the stack.
27 void pop() {
28 q_1.pop();
29 }
30
31 // Get the top element.
32 int top() {
33 return q_1.front();
34 }
35
36 // Return whether the stack is empty.
37 bool empty() {
38 return q_1.empty();
39 }
40 };