diff --git a/data_structures/stacks/stack_using_two_queues.py b/data_structures/stacks/stack_using_two_queues.py new file mode 100644 index 000000000000..d88acf2264fa --- /dev/null +++ b/data_structures/stacks/stack_using_two_queues.py @@ -0,0 +1,71 @@ +# for explanation refer this https://www.geeksforgeeks.org/implement-stack-using-queue/ + +class StackWithQueues: + def __init__(self): + self.queue1 = [] + self.queue2 = [] + + def push(self, element): + self.queue1.append(element) + + def pop(self): + if not self.queue1: + return None + + while len(self.queue1) > 1: + self.queue2.append(self.queue1.pop(0)) + + element = self.queue1.pop(0) + + self.queue1, self.queue2 = self.queue2, self.queue1 + + return element + + def peek(self): + if not self.queue1: + return None + + while len(self.queue1) > 1: + self.queue2.append(self.queue1.pop(0)) + + element = self.queue1[0] + + self.queue2.append(self.queue1.pop(0)) + + self.queue1, self.queue2 = self.queue2, self.queue1 + + return element + + +# Initialize the stack +stack = StackWithQueues() + +while True: + print("\nChoose operation:") + print("1. Push") + print("2. Pop") + print("3. Peek") + print("4. Quit") + + choice = input("Enter choice (1/2/3/4): ") + + if choice == '1': + element = input("Enter element to push: ") + stack.push(element) + print(f"{element} pushed onto the stack.") + elif choice == '2': + popped_element = stack.pop() + if popped_element is not None: + print(f"Popped element: {popped_element}") + else: + print("Stack is empty.") + elif choice == '3': + peeked_element = stack.peek() + if peeked_element is not None: + print(f"Top element: {peeked_element}") + else: + print("Stack is empty.") + elif choice == '4': + break + else: + print("Invalid choice. Please try again.")