Skip to content

Commit b71cc01

Browse files
committed
Queue two stacks implementation
1 parent 3a472cf commit b71cc01

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

queue/queue-two-stacks-impl.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
class Stack:
2+
def __init__(self):
3+
self.items = []
4+
5+
def is_empty(self):
6+
return self.items == []
7+
8+
def push(self, item):
9+
self.items.append(item)
10+
11+
def pop(self):
12+
return self.items.pop()
13+
14+
def peek(self):
15+
return self.items[len(self.items) - 1]
16+
17+
def size(self):
18+
return len(self.items)
19+
20+
21+
class Queue:
22+
def __init__(self):
23+
self.input_stack: Stack = Stack()
24+
self.output_stack: Stack = Stack()
25+
26+
def is_empty(self) -> bool:
27+
return self.input_stack.is_empty()
28+
29+
def size(self) -> int:
30+
return self.input_stack.size()
31+
32+
def enqueue(self, item):
33+
self.input_stack.push(item)
34+
35+
def dequeue(self):
36+
if self.is_empty():
37+
raise Exception("Queue is empty")
38+
while not self.input_stack.is_empty():
39+
self.output_stack.push(self.input_stack.pop())
40+
ret_value = self.output_stack.pop()
41+
while not self.output_stack.is_empty():
42+
self.input_stack.push(self.output_stack.pop())
43+
return ret_value
44+
45+
46+
def hot_potato(people: list, num: int) -> str:
47+
q: Queue = Queue()
48+
for person in people:
49+
q.enqueue(person)
50+
51+
while q.size() > 1:
52+
for i in range(num):
53+
q.enqueue(q.dequeue())
54+
q.dequeue()
55+
56+
return q.dequeue()
57+
58+
59+
print(hot_potato(["Bill", "David", "Susan", "Jane", "Kent", "Brad"], 7))

0 commit comments

Comments
 (0)