From 4c31c78b228025eb397f7213838037bd78d30ca0 Mon Sep 17 00:00:00 2001 From: K Anamithra Date: Sun, 8 Oct 2023 10:27:12 +0530 Subject: [PATCH 1/3] added implementing stack using two queues --- .../stacks/stack_using_two_queues.py | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 data_structures/stacks/stack_using_two_queues.py 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..c3b54300e098 --- /dev/null +++ b/data_structures/stacks/stack_using_two_queues.py @@ -0,0 +1,53 @@ +class Stack: + def __init__(self): + self.queue1 = Queue() + self.queue2 = Queue() + + def is_empty(self): + return self.queue2.is_empty() + + def push(self, data): + self.queue1.enqueue(data) + while not self.queue2.is_empty(): + x = self.queue2.dequeue() + self.queue1.enqueue(x) + self.queue1, self.queue2 = self.queue2, self.queue1 + + def pop(self): + return self.queue2.dequeue() + + +class Queue: + def __init__(self): + self.items = [] + + def is_empty(self): + return self.items == [] + + def enqueue(self, data): + self.items.append(data) + + def dequeue(self): + return self.items.pop(0) + + +s = Stack() + +print('Menu') +print('push ') +print('pop') +print('quit') + +while True: + do = input('What would you like to do? ').split() + + operation = do[0].strip().lower() + if operation == 'push': + s.push(int(do[1])) + elif operation == 'pop': + if s.is_empty(): + print('Stack is empty.') + else: + print('Popped value: ', s.pop()) + elif operation == 'quit': + break From 3c1d8057245dc68ef16e37886dcc076b830494b8 Mon Sep 17 00:00:00 2001 From: K Anamithra Date: Sun, 8 Oct 2023 10:34:50 +0530 Subject: [PATCH 2/3] Update Stack using two queues --- .../stacks/stack_using_two_queues.py | 89 +++++++++++-------- 1 file changed, 52 insertions(+), 37 deletions(-) diff --git a/data_structures/stacks/stack_using_two_queues.py b/data_structures/stacks/stack_using_two_queues.py index c3b54300e098..c24e20ebf25b 100644 --- a/data_structures/stacks/stack_using_two_queues.py +++ b/data_structures/stacks/stack_using_two_queues.py @@ -1,53 +1,68 @@ -class Stack: +class StackWithQueues: def __init__(self): - self.queue1 = Queue() - self.queue2 = Queue() + self.queue1 = [] + self.queue2 = [] - def is_empty(self): - return self.queue2.is_empty() - - def push(self, data): - self.queue1.enqueue(data) - while not self.queue2.is_empty(): - x = self.queue2.dequeue() - self.queue1.enqueue(x) - self.queue1, self.queue2 = self.queue2, self.queue1 + def push(self, element): + self.queue1.append(element) def pop(self): - return self.queue2.dequeue() + if not self.queue1: + return None + while len(self.queue1) > 1: + self.queue2.append(self.queue1.pop(0)) -class Queue: - def __init__(self): - self.items = [] + element = self.queue1.pop(0) - def is_empty(self): - return self.items == [] + self.queue1, self.queue2 = self.queue2, self.queue1 + + return element - def enqueue(self, data): - self.items.append(data) + def peek(self): + if not self.queue1: + return None - def dequeue(self): - return self.items.pop(0) + while len(self.queue1) > 1: + self.queue2.append(self.queue1.pop(0)) + element = self.queue1[0] -s = Stack() + self.queue2.append(self.queue1.pop(0)) -print('Menu') -print('push ') -print('pop') -print('quit') + self.queue1, self.queue2 = self.queue2, self.queue1 + + return element + +# Initialize the stack +stack = StackWithQueues() while True: - do = input('What would you like to do? ').split() - - operation = do[0].strip().lower() - if operation == 'push': - s.push(int(do[1])) - elif operation == 'pop': - if s.is_empty(): - print('Stack is empty.') + 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('Popped value: ', s.pop()) - elif operation == 'quit': + print("Stack is empty.") + elif choice == '4': break + else: + print("Invalid choice. Please try again.") From c86b303339bf9d217b631b4273aa4217e11de387 Mon Sep 17 00:00:00 2001 From: K Anamithra Date: Sun, 8 Oct 2023 10:38:20 +0530 Subject: [PATCH 3/3] Update stack_using_two_queues.py --- data_structures/stacks/stack_using_two_queues.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data_structures/stacks/stack_using_two_queues.py b/data_structures/stacks/stack_using_two_queues.py index c24e20ebf25b..d88acf2264fa 100644 --- a/data_structures/stacks/stack_using_two_queues.py +++ b/data_structures/stacks/stack_using_two_queues.py @@ -1,3 +1,5 @@ +# for explanation refer this https://www.geeksforgeeks.org/implement-stack-using-queue/ + class StackWithQueues: def __init__(self): self.queue1 = [] @@ -34,6 +36,7 @@ def peek(self): return element + # Initialize the stack stack = StackWithQueues()