diff --git a/stacks_queues/queue.py b/stacks_queues/queue.py index d66dab2..56b4528 100644 --- a/stacks_queues/queue.py +++ b/stacks_queues/queue.py @@ -1,3 +1,4 @@ +from stacks_queues.linked_list import LinkedList INITIAL_QUEUE_SIZE = 20 @@ -15,7 +16,6 @@ def __init__(self): self.front = -1 self.rear = -1 self.size = 0 - def enqueue(self, element): """ Adds an element to the Queue @@ -23,34 +23,57 @@ def enqueue(self, element): In the store are occupied returns None """ - pass + if self.front == -1 & self.rear == -1: + self.front = 0 + self.rear = 0 + elif self.rear == self.front: + raise QueueFullException(f"Queue is full.") + + self.store[self.rear] = element + self.rear = (self.rear + 1) % self.buffer_size + self.size += 1 def dequeue(self): """ Removes and returns an element from the Queue Raises a QueueEmptyException if The Queue is empty. """ - pass + if self.rear == -1 and self.front == -1: + raise QueueEmptyException("Queue is empty.") + + if self.size == 0: + self.front = -1 + self.rear = -1 + + front_item = self.store[self.front] + self.store[self.front] = None + + self.front = (self.front + 1) % self.buffer_size + self.size -= 1 + + return front_item def front(self): """ Returns an element from the front of the Queue and None if the Queue is empty. Does not remove anything. """ - pass + if self.front == -1: + raise QueueEmptyException("Queue is empty") + return self.store[self.front] def size(self): """ Returns the number of elements in The Queue """ - pass + return self.size def empty(self): """ Returns True if the Queue is empty And False otherwise. """ - pass + return self.size == 0 def __str__(self): """ Returns the Queue in String form like: @@ -58,4 +81,17 @@ def __str__(self): Starting with the front of the Queue and ending with the rear of the Queue. """ - pass + list = [] + current_item = self.front + count = 0 + + if self.size == 0: + return str(list) + while count < self.size: + list.append((str(self.store[current_item])).replace("'", "")) + current_item =(current_item+1) % self.buffer_size + count +=1 + return str(list).replace("'", "") + + + diff --git a/stacks_queues/stack.py b/stacks_queues/stack.py index 94fb2a6..ed781ee 100644 --- a/stacks_queues/stack.py +++ b/stacks_queues/stack.py @@ -9,30 +9,19 @@ def __init__(self): self.store = LinkedList() def push(self, element): - """ Adds an element to the top of the Stack. - Returns None - """ - pass + self.store.add_first(element) + return None def pop(self): - """ Removes an element from the top - Of the Stack - Raises a StackEmptyException if - The Stack is empty. - returns None - """ - pass + if self.store.empty(): + raise StackEmptyException("Stack is empty.") + return self.store.remove_first() def empty(self): - """ Returns True if the Stack is empty - And False otherwise - """ - pass + return self.store.empty() def __str__(self): - """ Returns the Stack in String form like: - [3, 4, 7] - Starting with the top of the Stack and - ending with the bottom of the Stack. - """ - pass + if self: + return str(self.store) + return "" +