###### tags: `stack`, `Design`, `Quene` # LeetCode 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. >Example 1: ``` Input: ["MyQueue", "push", "push", "peek", "pop", "empty"] [[], [1], [2], [], [], []] Output: [null, null, null, 1, 1, false] Explanation: MyQueue myQueue = new MyQueue(); myQueue.push(1); // queue is: [1] myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue) myQueue.peek(); // return 1 myQueue.pop(); // return 1, queue is [2] myQueue.empty(); // return false ``` ### Constraints: - $1 <= x <= 9$ - At most 100 calls will be made to push, pop, peek, and empty. - All the calls to pop and peek are valid.. --- ### Idea: >用 list 模擬 stack 操作,刪除的時候利用一個 stack pop 到另一個 stack push 這樣就可以刪除先進來的值,接著再做一次同樣的操作就可以把 stack 還原回去原本的順序。 ### Solution: Python: ```python= class MyQueue: def __init__(self): self.stack = [] self.re = [] def push(self, x: int) -> None: self.stack.append(x) def pop(self) -> int: while (self.stack!=[]): self.re.append(self.stack.pop()) delt = self.re.pop() while (self.re!=[]): self.stack.append(self.re.pop()) return delt def peek(self) -> int: return self.stack[0] def empty(self) -> bool: return self.stack == [] # Your MyQueue object will be instantiated and called as such: # obj = MyQueue() # obj.push(x) # param_2 = obj.pop() # param_3 = obj.peek() # param_4 = obj.empty() ``` C++: ```cpp= ```