-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathcircular-queue-fixed-size-array-impl.py
53 lines (40 loc) · 1.33 KB
/
circular-queue-fixed-size-array-impl.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Queue:
def __init__(self, length: int = 10):
self._length: int = length
self._queue: list = [None] * self._length
self._front = self._rear = -1
self._count: int = 0
def enqueue(self, item):
if self.is_full():
raise Exception("Queue is full")
self._rear = (self._rear + 1) % self._length
if self._front == -1:
self._front += 1
self._count += 1
self._queue[self._rear] = item
def dequeue(self):
if self.is_empty():
raise Exception("Queue is empty")
ret_value = self._queue[self._front]
if self._front == self._rear:
self._front = self._rear = -1
else:
self._front = (self._front + 1) % self._length
self._count -= 1
return ret_value
def size(self) -> int:
return self._count
def is_empty(self) -> bool:
return self._front == -1
def is_full(self) -> bool:
return (self._rear + 1) % self._length == self._front
def hot_potato(namelist, number):
q = Queue(30)
for name in namelist:
q.enqueue(name)
while q.size() > 1:
for i in range(number):
q.enqueue(q.dequeue())
q.dequeue()
return q.dequeue()
print(hot_potato(["Bill", "David", "Susan", "Jane", "Kent", "Brad"], 7))