Queue using Two Stacks

  • + 0 comments
    class Stack:
        def __init__(self):
            self.items = []
            
        def push(self, x):
            self.items.append(x)
        
        def pop(self):
            if self.items:
                return self.items.pop()
            else:
                return None
                
        def top(self):
            if self.items:
                return self.items[-1]
            else:
                return None
                
    class Queue:
        def __init__(self):
            self.en_st = Stack()  # enqueue stack
            self.de_st = Stack()  # dequeue stack
            
        def enqueue(self, x):
            self.en_st.push(x)
            
        def dequeue(self):
            if not self.de_st.items:
                while self.en_st.items:
                    self.de_st.push(self.en_st.pop())
            return self.de_st.pop()
        
        def front(self):
            if not self.de_st.items:
                while self.en_st.items:
                    self.de_st.push(self.en_st.pop())
            return self.de_st.top()
    
    queue = Queue()
    count = int(input())
    for _ in range(count):
        order = input().split()
        if order[0] == '1':
            queue.enqueue(int(order[1]))
        elif order[0] == '2':
            queue.dequeue()
        elif order[0] == '3':
            print(queue.front())
        else:
            print('Error code: 999')
            break