Skip to content

Commit cc4cedf

Browse files
anamithrak15pre-commit-ci[bot]cclauss
authored andcommitted
added implementing stack using two queues (TheAlgorithms#10076)
* added implementing stack using two queues * Update Stack using two queues * Update stack_using_two_queues.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update stack_using_two_queues.py * Update stack_using_two_queues.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update stack_using_two_queues.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update stack_using_two_queues.py * Update stack_using_two_queues.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss <[email protected]>
1 parent f9c3b48 commit cc4cedf

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

Diff for: data_structures/stacks/stack_using_two_queues.py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
from __future__ import annotations
2+
3+
from collections import deque
4+
from dataclasses import dataclass, field
5+
6+
7+
@dataclass
8+
class StackWithQueues:
9+
"""
10+
https://www.geeksforgeeks.org/implement-stack-using-queue/
11+
12+
>>> stack = StackWithQueues()
13+
>>> stack.push(1)
14+
>>> stack.push(2)
15+
>>> stack.push(3)
16+
>>> stack.peek()
17+
3
18+
>>> stack.pop()
19+
3
20+
>>> stack.peek()
21+
2
22+
>>> stack.pop()
23+
2
24+
>>> stack.pop()
25+
1
26+
>>> stack.peek() is None
27+
True
28+
>>> stack.pop()
29+
Traceback (most recent call last):
30+
...
31+
IndexError: pop from an empty deque
32+
"""
33+
34+
main_queue: deque[int] = field(default_factory=deque)
35+
temp_queue: deque[int] = field(default_factory=deque)
36+
37+
def push(self, item: int) -> None:
38+
self.temp_queue.append(item)
39+
while self.main_queue:
40+
self.temp_queue.append(self.main_queue.popleft())
41+
self.main_queue, self.temp_queue = self.temp_queue, self.main_queue
42+
43+
def pop(self) -> int:
44+
return self.main_queue.popleft()
45+
46+
def peek(self) -> int | None:
47+
return self.main_queue[0] if self.main_queue else None
48+
49+
50+
if __name__ == "__main__":
51+
import doctest
52+
53+
doctest.testmod()
54+
55+
stack: StackWithQueues | None = StackWithQueues()
56+
while stack:
57+
print("\nChoose operation:")
58+
print("1. Push")
59+
print("2. Pop")
60+
print("3. Peek")
61+
print("4. Quit")
62+
63+
choice = input("Enter choice (1/2/3/4): ")
64+
65+
if choice == "1":
66+
element = int(input("Enter an integer to push: ").strip())
67+
stack.push(element)
68+
print(f"{element} pushed onto the stack.")
69+
elif choice == "2":
70+
popped_element = stack.pop()
71+
if popped_element is not None:
72+
print(f"Popped element: {popped_element}")
73+
else:
74+
print("Stack is empty.")
75+
elif choice == "3":
76+
peeked_element = stack.peek()
77+
if peeked_element is not None:
78+
print(f"Top element: {peeked_element}")
79+
else:
80+
print("Stack is empty.")
81+
elif choice == "4":
82+
del stack
83+
stack = None
84+
else:
85+
print("Invalid choice. Please try again.")

0 commit comments

Comments
 (0)