Skip to main content

Implement Queue using Stacks

Problem

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.

Notes:

  • You must use only standard operations of a stack, which means only push to top, peek/pop from top, size, and is empty operations are valid.
  • Depending on your language, the stack may not be supported natively. You may simulate a stack using a list or deque (double-ended queue) as long as you use only a stack's standard operations.

Solution Approach

Expected Time complexity: O(n)O(n)

Click - to see solution code
class MyQueue {
stack<int> q1, q2;

public:
MyQueue() {}

void push(int x) { q2.push(x); }

int pop() {
peek();
int a = q1.top();
q1.pop();
return a;
}

int peek() {
if (q1.empty()) {
while (!q2.empty()) {
q1.push(q2.top());
q2.pop();
}
}
return q1.top();
}

bool empty() { return (q1.empty() && q2.empty()); }
};