[LeetCode] Implement Queue using Stacks

232. Implement Queue using Stacks

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.
  • Time : O(1)
    • reverse operation needs o(n) but, after than, we can call pop operation at least n times
    • so total time complex is o(n/n) = o(1)
  • Space : O(n)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class MyQueue {
stack<int> popStack, pushStack;
public:
MyQueue() {}

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

int pop() {
int res = peek();
popStack.pop();
return res;
}

int peek() {
if(popStack.empty()) {
while(!pushStack.empty()) {
popStack.push(pushStack.top());
pushStack.pop();
}

}
return popStack.top();
}

bool empty() {
return pushStack.empty() and popStack.empty();
}
};

/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
Author: Song Hayoung
Link: https://songhayoung.github.io/2022/02/17/PS/LeetCode/implement-queue-using-stacks/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.