def top(self):  #returns the top element
     #complexity O(1)
     x = Option()
     if self.__elements.emptyList():
         x.setOp(False)
     else:
         x.setEl(self.__elements.getEl(0))
     return x  #returns empty option if list is empty
 def dequeue(self):  #deletes the last elemet in the fill
     #complexity O(n) if empty is empty else complexity O(1)
     if self.__empty.emptyList():
         if self.__fill.emptyList():
             raise Exception("Queue is Empty")
         self.__empty = self.__fill.reverse(Nil())  #takes linear time
         self.__fill = Nil()
     op = Option()
     if self.isEmpty():
         op.setOp(False)
     else:
         op.setEl(self.__empty.getEl(0))
         self.__empty.deletFirst()
     return op  #returns the value