-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQueue.py
More file actions
119 lines (97 loc) · 2.4 KB
/
Queue.py
File metadata and controls
119 lines (97 loc) · 2.4 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
from DoublyLinkedList import DoublyLinkedList
class Queue(DoublyLinkedList):
__queue = None
__last = None
__size = 0
def __init__(self, first=None) -> None:
if first != None:
element = DoublyLinkedList(first)
self.__queue = element
self.__last = element
self.__size = 1
def peak(self):
'''
# Returns:
The top of the Queue
'''
return (self.__queue.llist) if self.__size > 0 else None
def enqueue(self, element) -> None:
'''
Place an element to the back of the Queue.
# Params:
element - The element to be placed in a container. The container will be placed
at the back of the Queue.
'''
elem = DoublyLinkedList(element)
if self.__size == 0:
self.__queue = elem
self.__last = elem
else:
self.__last.append = elem
self.__last = self.__last.getNext
self.__size += 1
def __enqueue(self, element: DoublyLinkedList) -> None:
'''
Place an element to the back of the Queue.
# Params:
element - The container will be placed at the back of the Queue.
'''
self.__last.append = element
self.__last = self.__last.getNext
def dequeue(self) -> DoublyLinkedList | None:
'''
Remove the first element in the Queue.
# Returns:
None - If the Queue is empty or if the size is 1\n
or\n
DoublyLinkedList - The new top of the Queue.
'''
if self.__size > 0:
if self.__queue.getNext != None:
temp = self.__queue.getNext
del self.__queue
self.__queue = temp
else:
del self.__queue
del self.__last
self.__queue, self.__last = None, None
self.__size -= 1
return self.__queue
def clear(self) -> None:
'''
Remove all elements from the Queue
'''
while self.__size > 0:
self.dequeue()
def insertBefore(self, first) -> None:
'''
Insert an element at the first position
# Params:
first - the object that will be put in the first position
'''
first = DoublyLinkedList(first)
if self.__size > 0:
first.append = self.__queue
self.__queue = first
else:
self.__queue = first
self.__last = first
self.__size = 1
def moveBack(self) -> None:
'''
Move top of Queue to the back
'''
if self.__size > 1:
self.__enqueue(self.__queue)
self.__queue = self.__queue.getNext
def contains(self, element) -> None:
pass
def isEmpty(self) -> bool:
return (self.__size > 0)
@property
def size(self) -> int:
'''
# Returns:
How many elements are in the Queue.
'''
return self.__size