From d1f2dbdeb99acde073b400302178204aff725c7f Mon Sep 17 00:00:00 2001 From: Dylan Buchi Date: Tue, 2 Nov 2021 00:54:41 -0300 Subject: [PATCH 1/2] [mypy] fix type annotations in circular_queue_linked_list --- .../queue/circular_queue_linked_list.py | 47 ++++++++++++++----- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/data_structures/queue/circular_queue_linked_list.py b/data_structures/queue/circular_queue_linked_list.py index 1878403bd2ef..8a351312f781 100644 --- a/data_structures/queue/circular_queue_linked_list.py +++ b/data_structures/queue/circular_queue_linked_list.py @@ -1,6 +1,8 @@ # Implementation of Circular Queue using linked lists # https://en.wikipedia.org/wiki/Circular_buffer +from __future__ import annotations + from typing import Any @@ -18,20 +20,26 @@ class CircularQueueLinkedList: """ def __init__(self, initial_capacity: int = 6) -> None: - self.front = None - self.rear = None + self.front: Node | None = None + self.rear: Node | None = None self.create_linked_list(initial_capacity) def create_linked_list(self, initial_capacity: int) -> None: current_node = Node() + self.front = current_node self.rear = current_node + previous_node = current_node - for i in range(1, initial_capacity): + + for _ in range(1, initial_capacity): current_node = Node() + previous_node.next = current_node current_node.prev = previous_node + previous_node = current_node + previous_node.next = self.front self.front.prev = previous_node @@ -49,9 +57,14 @@ def is_empty(self) -> bool: >>> cq.is_empty() True """ - return self.front == self.rear and self.front.data is None - def first(self) -> Any: + return ( + self.front == self.rear + and self.front is not None + and self.front.data is None + ) + + def first(self) -> Any | None: """ Returns the first element of the queue >>> cq = CircularQueueLinkedList() @@ -74,7 +87,7 @@ def first(self) -> Any: 'b' """ self.check_can_perform_operation() - return self.front.data + return self.front.data if self.front else None def enqueue(self, data: Any) -> None: """ @@ -92,11 +105,15 @@ def enqueue(self, data: Any) -> None: ... Exception: Empty Queue """ + if self.rear is None: + return + self.check_is_full() - if self.is_empty(): - self.rear.data = data - else: + + if not self.is_empty(): self.rear = self.rear.next + + if self.rear: self.rear.data = data def dequeue(self) -> Any: @@ -117,6 +134,10 @@ def dequeue(self) -> Any: Exception: Empty Queue """ self.check_can_perform_operation() + + if self.rear is None or self.front is None: + return + if self.front == self.rear: data = self.front.data self.front.data = None @@ -133,15 +154,15 @@ def check_can_perform_operation(self) -> None: raise Exception("Empty Queue") def check_is_full(self) -> None: - if self.rear.next == self.front: + if self.rear and self.rear.next == self.front: raise Exception("Full Queue") class Node: def __init__(self) -> None: - self.data = None - self.next = None - self.prev = None + self.data: Any | None = None + self.next: Node | None = None + self.prev: Node | None = None if __name__ == "__main__": From 319ade6a54d1be82dfe25b255444f26db0770c6b Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Tue, 2 Nov 2021 11:04:35 +0100 Subject: [PATCH 2/2] Remove 10 blank lines --- data_structures/queue/circular_queue_linked_list.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/data_structures/queue/circular_queue_linked_list.py b/data_structures/queue/circular_queue_linked_list.py index 8a351312f781..e8c2b8bffc06 100644 --- a/data_structures/queue/circular_queue_linked_list.py +++ b/data_structures/queue/circular_queue_linked_list.py @@ -26,20 +26,14 @@ def __init__(self, initial_capacity: int = 6) -> None: def create_linked_list(self, initial_capacity: int) -> None: current_node = Node() - self.front = current_node self.rear = current_node - previous_node = current_node - for _ in range(1, initial_capacity): current_node = Node() - previous_node.next = current_node current_node.prev = previous_node - previous_node = current_node - previous_node.next = self.front self.front.prev = previous_node @@ -109,10 +103,8 @@ def enqueue(self, data: Any) -> None: return self.check_is_full() - if not self.is_empty(): self.rear = self.rear.next - if self.rear: self.rear.data = data @@ -134,10 +126,8 @@ def dequeue(self) -> Any: Exception: Empty Queue """ self.check_can_perform_operation() - if self.rear is None or self.front is None: return - if self.front == self.rear: data = self.front.data self.front.data = None