# A simple example of a queue

# This file serves mainly as a demonstration of
# queue idea, implementation and management.

# Python provides a queue module which
# should be used in most standard "real life" applications.
# For more details on queue module see
# https://docs.python.org/3/library/queue.html

class Queue:
    def __init__(self):
        self.items = []

    def size(self):
        return len(self.items)

    # note the prefix "is" denoting a boolean function
    def isEmpty(self):
        if self.size() == 0:
            return True
        else:
            return False

    def insert(self, item):
        self.items.append(item)

    def delFront(self):
        if self.isEmpty():
            return None
        top = self.items[0]
        del( self.items[0] )
        return top


    def print(self):
        if self.size() == 0:
            print("Queue is empty.")
            return
        print( ("+---" * self.size())+ "+" )
        print( "|", end = "")
        for item in self.items:
            itemstr = str(item)
            if 0 <= item <= 10:
                itemstr = " " + str(item) + " "
            if -9 <= item <= -1 or 10 <= item <= 99:
                itemstr =  " "+ str(item)
            print(itemstr + "|", end = "")
        print()
        print( ("+---" * self.size())+ "+" )

    # many aliases
    def enqueue(self, item ):
        self.insert( item )

    def put(self, item ):
        self.insert( item )

    def insTail(self, item ):
        self.insert( item )

    def push(self, item ):
        self.insert( item )

    def pop(self):
        return self.delFront()

    def delete(self):
        return self.delFront()

    def dequeue(self):
        return self.delFront()

    # ---- end of class Queue -----------------------




q = Queue()
q.insert(10)
q.insert(20)
q.print()
q.insert(30)
q.insert(40)
q.print()
q.delete()
q.print()
q.delete()
q.print()
q.delete()
q.print()
q.delete()
q.print()






