Skip to content

Commit 54ac216

Browse files
committed
update queue.py
changed implementation to not use built in python lists. added english comments
1 parent 5438853 commit 54ac216

File tree

1 file changed

+65
-9
lines changed

1 file changed

+65
-9
lines changed

src/python/queue.py

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,90 @@
1-
""" Implementação da estrutura de dados "fila" """
2-
31
import random
42

53

4+
class Node:
5+
def __init__(self, value):
6+
self.value = value
7+
self.left_ptr = None
8+
9+
@property
10+
def prev(self):
11+
return self.left_ptr
12+
13+
@prev.setter
14+
def prev(self, ptr):
15+
self.left_ptr = ptr
16+
17+
@property
18+
def get_value(self):
19+
return self.value
20+
21+
622
class Queue:
723
def __init__(self):
8-
self.__queue = []
24+
self.head = None
25+
self.tail = None
26+
self.length = 0
927

1028
def enqueue(self, value):
11-
self.__queue.append(value)
29+
new = Node(value)
30+
self.length += 1
31+
# if empty make new node both head and tail of queue
32+
if self.head is None:
33+
self.head = new
34+
self.tail = new
35+
# otherwise add new node to end of queue and update tail
36+
else:
37+
self.tail.prev = new
38+
self.tail = new
1239

1340
def dequeue(self):
14-
return self.__queue.pop(0)
41+
if self.length == 0:
42+
print("Queue is empty, cannot dequeue")
43+
return
44+
else:
45+
self.head = self.head.prev
46+
self.length -= 1
1547

1648
def show(self):
17-
print(f"Queue: {self.__queue}")
49+
ptr = self.head
50+
val = []
51+
while ptr is not None:
52+
val.append(ptr.get_value)
53+
ptr = ptr.prev
54+
55+
print(val)
56+
57+
def length(self):
58+
return self.length
1859

1960

2061
def main():
2162
queue = Queue()
2263

23-
for _ in range(0, 10):
24-
queue.enqueue(random.randint(10, 99))
25-
64+
print("Queuing 1 and 7")
65+
queue.enqueue(1)
2666
queue.show()
67+
print(f"Queue is length {queue.length}")
68+
queue.enqueue(7)
69+
queue.show()
70+
print(f"Queue is length {queue.length}")
2771

72+
print("Dequeuing twice")
2873
queue.dequeue()
74+
queue.show()
75+
print(f"Queue is length {queue.length}")
76+
queue.dequeue()
77+
queue.show()
78+
print(f"Queue is length {queue.length}")
79+
80+
print("Dequeuing again")
2981
queue.dequeue()
82+
print(f"Queue is length {queue.length}")
3083

84+
print("Queueing 12")
85+
queue.enqueue(12)
3186
queue.show()
87+
print(f"Queue is length {queue.length}")
3288

3389

3490
if __name__ == "__main__":

0 commit comments

Comments
 (0)