In: Computer Science
in python please ,, A SOON AS POSSIBLE PLEASE #Class invariant for SimpleQueue, a queue based on a linked list # 1. The queue is a linked list of ListNode objects. # 2. A SimpleQueue object has instance variables self.head, a reference to the node at the front of the queue, self.tail, a reference # to the node at the end of the queue, and self.size, the number of nodes in the queue. # 3. If self.size = 0, then self.head and self.tail are None. # 4. The ListNode object at the end (referred to by self.tail) has link None. For all other ListNode objects, # the link refers to the next ListNode in the queue. # 5. The new item is enqueued at the tail of the SimpleQueue. # 6. An item is dequeued from the head or front of the SimpleQueue.
class SimpleQueue:
    '''a class for a simple queue implemented as a linked list with head and tail references'''
    def __init__(self):
        '''constructor that creates an empty queue'''
    def enqueue(self, item):
        '''post:  ListNode with item as its data has been inserted at the tail of the queue'''
      
        
    def dequeue(self):
        '''post: The ListNode at the head of the Queue has been removed from the queue and its item has been returned.'''
      
    def front(self):
        '''post: Returns the item at the front of the queue.  The ListNode at the front is not removed. '''
       
    def length(self):
        '''post:  Returns the number of items in the queue'''
      
class ListNode(object):
    
    def __init__(self, item = None, link = None):
        '''post: creates a ListNode with the specified data value and link''' 
        self.item = item
        self.link = link
            
SOURCE CODE:
*Please follow the comments to better understand the code.
**Please look at the Screenshot below and use this code to copy-paste.
***The code in the below screenshot is neatly indented for better understanding.
# Class invariant for SimpleQueue, a queue based on a linked list
#   1.  The queue is a linked list of ListNode objects.
#   2.  A SimpleQueue object has instance variables self.head, a reference to the node at the front of the queue, self.tail, a reference
#       to the node at the end of the queue, and self.size, the number of nodes in the queue.
#   3.  If self.size = 0, then self.head and self.tail are None.
#   4.  The ListNode object at the end (referred to by self.tail) has link None.  For all other ListNode objects,
#       the link refers to the next ListNode in the queue.
#   5.  The new item is enqueued at the tail of the SimpleQueue.
#   6.  An item is dequeued from the head or front of the SimpleQueue.
class SimpleQueue:
    """a class for a simple queue implemented as a linked list with head and tail references"""
    def __init__(self):
        """constructor that creates an empty queue"""
        self.front = None
        self.rear = None
    def enqueue(self, item):
        """post:  ListNode with item as its data has been inserted at the tail of the queue"""
        temp = ListNode(item)
        # Check if queue is empty
        if self.rear is None:
            self.front = temp
            self.rear = temp
        else:
            self.rear.link = temp
            self.rear = temp
    def dequeue(self):
        """post: The ListNode at the head of the Queue has been removed from the queue and its item has been returned."""
        if self.length() == 0:
            return None
        temp = self.front
        self.front = temp.link
        if self.front is None:
            self.rear = None
        return str(temp.item)
    def front(self):
        """post: Returns the item at the front of the queue.  The ListNode at the front is not removed. """
        return self.front
    def length(self):
        """post:  Returns the number of items in the queue"""
        temp = self.front
        count = 0
        while temp is not None:
            count += 1
            temp = temp.link
        return count
class ListNode(object):
    def __init__(self, item=None, link=None):
        """post: creates a ListNode with the specified data value and link"""
        self.item = item
        self.link = link
# TEST here
def main():
    queue = SimpleQueue()
    print('The length is:', queue.length())
    print('inserting 10,20,30..')
    queue.enqueue(10)
    queue.enqueue(20)
    queue.enqueue(30)
    print('Now, The length is:', queue.length())
    print('The Front is:', queue.front.item)
    print('\nDequeue: ', queue.dequeue())
    print('Dequeue: ', queue.dequeue())
    print('Now, The length is:', queue.length())
    print('The Front is:', queue.front.item)
main()
================


OUTPUT
