Queue using Two Stacks

  • + 0 comments

    Python Solution

    # Enter your code here. Read input from STDIN. Print output to STDOUT
    class Queue: # Costly DeQueue
        # Queue using two stacks with costly deQueue()
        def __init__(self):
            self.s1 = []  # Stacks
            self.s2 = []  # Stacks
            # Note that for Stacks, we can either do append() or pop()
    
        # EnQueue item to the queue
        def enQueue(self, x):
            self.s1.append(x)
    
        # DeQueue item from the queue
        def deQueue(self):
            # if s2 is empty and s1 has elements
            if not self.s2:
                while self.s1:
                    self.s2.append(self.s1.pop())
            return self.s2.pop() if self.s2 else None
    
        def peek(self):
            if not self.s2:
                while self.s1:
                    self.s2.append(self.s1.pop())
            return self.s2[-1] if self.s2 else None
    
    queue = Queue()
    for i in range(int(input())):
        query = input().split(" ")
        if query[0] == "1": # enqueue
            queue.enQueue(query[1])
        elif query[0] == "2":  # pop (dequeue front element)
            queue.deQueue()
        elif query[0] == "3":  # print
            print(queue.peek())
        else:
            print("ERROR!") # Should never reach here