Skip to content

Commit 24731b0

Browse files
dylanbuchicclauss
andauthored
[mypy] fix type annotations in data_structures/queue/circular_queue_linked_list.py (TheAlgorithms#5749)
* [mypy] fix type annotations in circular_queue_linked_list * Remove 10 blank lines Co-authored-by: Christian Clauss <[email protected]>
1 parent 3c8fec1 commit 24731b0

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

data_structures/queue/circular_queue_linked_list.py

+24-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Implementation of Circular Queue using linked lists
22
# https://en.wikipedia.org/wiki/Circular_buffer
33

4+
from __future__ import annotations
5+
46
from typing import Any
57

68

@@ -18,16 +20,16 @@ class CircularQueueLinkedList:
1820
"""
1921

2022
def __init__(self, initial_capacity: int = 6) -> None:
21-
self.front = None
22-
self.rear = None
23+
self.front: Node | None = None
24+
self.rear: Node | None = None
2325
self.create_linked_list(initial_capacity)
2426

2527
def create_linked_list(self, initial_capacity: int) -> None:
2628
current_node = Node()
2729
self.front = current_node
2830
self.rear = current_node
2931
previous_node = current_node
30-
for i in range(1, initial_capacity):
32+
for _ in range(1, initial_capacity):
3133
current_node = Node()
3234
previous_node.next = current_node
3335
current_node.prev = previous_node
@@ -49,9 +51,14 @@ def is_empty(self) -> bool:
4951
>>> cq.is_empty()
5052
True
5153
"""
52-
return self.front == self.rear and self.front.data is None
5354

54-
def first(self) -> Any:
55+
return (
56+
self.front == self.rear
57+
and self.front is not None
58+
and self.front.data is None
59+
)
60+
61+
def first(self) -> Any | None:
5562
"""
5663
Returns the first element of the queue
5764
>>> cq = CircularQueueLinkedList()
@@ -74,7 +81,7 @@ def first(self) -> Any:
7481
'b'
7582
"""
7683
self.check_can_perform_operation()
77-
return self.front.data
84+
return self.front.data if self.front else None
7885

7986
def enqueue(self, data: Any) -> None:
8087
"""
@@ -92,11 +99,13 @@ def enqueue(self, data: Any) -> None:
9299
...
93100
Exception: Empty Queue
94101
"""
102+
if self.rear is None:
103+
return
104+
95105
self.check_is_full()
96-
if self.is_empty():
97-
self.rear.data = data
98-
else:
106+
if not self.is_empty():
99107
self.rear = self.rear.next
108+
if self.rear:
100109
self.rear.data = data
101110

102111
def dequeue(self) -> Any:
@@ -117,6 +126,8 @@ def dequeue(self) -> Any:
117126
Exception: Empty Queue
118127
"""
119128
self.check_can_perform_operation()
129+
if self.rear is None or self.front is None:
130+
return
120131
if self.front == self.rear:
121132
data = self.front.data
122133
self.front.data = None
@@ -133,15 +144,15 @@ def check_can_perform_operation(self) -> None:
133144
raise Exception("Empty Queue")
134145

135146
def check_is_full(self) -> None:
136-
if self.rear.next == self.front:
147+
if self.rear and self.rear.next == self.front:
137148
raise Exception("Full Queue")
138149

139150

140151
class Node:
141152
def __init__(self) -> None:
142-
self.data = None
143-
self.next = None
144-
self.prev = None
153+
self.data: Any | None = None
154+
self.next: Node | None = None
155+
self.prev: Node | None = None
145156

146157

147158
if __name__ == "__main__":

0 commit comments

Comments
 (0)