# Implementation of the Queue ADT using a circular array. from array204 import Array class Queue : # Creates an empty queue. def __init__( self, max_size = 16) : self._count = 0 self._front = 0 self._back = max_size - 1 self._qarray = Array( max_size ) # Returns True if the queue is empty. def is_empty( self ) : return self._count == 0 # Returns True if the queue is full. def is_full( self ) : return self._count == len(self._qarray) # Returns the number of items in the queue. def __len__( self ) : return self._count # Adds the given item to the queue. def enqueue( self, item ): assert not self.is_full(), "Cannot enqueue to a full queue." max_size = len(self._qarray) self._back = (self._back + 1) % max_size self._qarray[self._back] = item self._count += 1 # Removes and returns the first item in the queue. def dequeue( self ): assert not self.is_empty(), "Cannot dequeue from an empty queue." item = self._qarray[ self._front ] max_size = len(self._qarray) self._front = (self._front + 1) % max_size self._count -= 1 return item # Examine the first item without removing it def peek( self ): assert not self.is_empty(), "Cannot peek from an empty queue." item = self._qarray[ self._front ] return item