-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmax_queue.py
More file actions
38 lines (30 loc) · 993 Bytes
/
Copy pathmax_queue.py
File metadata and controls
38 lines (30 loc) · 993 Bytes
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
from collections import deque
class MaxQueue:
def __init__(self):
self.__size = 0
self.__data = []
self.__max_values = deque()
def __len__(self):
return self.__size
def enqueue(self, value):
# delete all the items in max_values which are less than the value we add
# as current element will stay in the queue longer
if not self.is_empty():
while self.__max_values and self.__max_values[-1] < value:
self.__max_values.pop()
self.__data.append(value)
self.__max_values.append(value)
self.__size += 1
def dequeue(self):
item = self.__data.pop(0)
if item == self.max():
self.__max_values.popleft()
self.__size -= 1
return item
def first(self):
return self.__data[0]
def is_empty(self):
return self.__size == 0
# front of the deque is max
def max(self):
return self.__max_values[0]