Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b2636d9

Browse files
anamithrak15pre-commit-ci[bot]cclauss
authored
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 <cclauss@me.com>
1 parent 52040a7 commit b2636d9

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /