# PROGRAM Queues as Linked Lists: ####### DECLARE LINKED LIST ####### class ListNode: def __init__(self, value, pointer): self.value = value self.pointer = pointer # END ListNode. nodeD = ListNode(31, None) nodeC = ListNode(37, nodeD) nodeB = ListNode(62, nodeC) nodeA = ListNode(23, nodeB) HeadNode = nodeA ################################## ########## SIMPLE PRINT ########## def PrintNodes(): print("[", nodeA.value, "] -> [",nodeB.value, "] -> [",nodeC.value, "] -> [",nodeD.value, "] -> NULL") # END PrintNodes. PrintNodes() ################################## def CreateEmptyList(): global HeadNode HeadNode = None # END CreateEmptyList. ################################## def DeleteAList(): global HeadNode HeadNode = None # END DeleteAList. ################################## def ListIsEmpty(): global HeadNode return HeadNode == None # END ListIsEmpty. ################################## ########## PRINT WITH LOOP ########## def PrintNodesWithLoop(): global HeadNode Current = HeadNode if (Current != None): # THEN while (Current.pointer != None): # DO print(Current.value) Current = Current.pointer # ENDWHILE; print(Current.value) else: print("Empty list") # ENDIF; # END PrintNodesWithLoop. PrintNodesWithLoop() ########## PRINT AND COUNT ########## def PrintNodesWithLoopAndCount(): global HeadNode Current = HeadNode CountNodes = 0 if (Current != None): # THEN while (Current.pointer != None): # DO print(Current.value) Current = Current.pointer CountNodes = CountNodes + 1 # ENDWHILE; # Print out and count for last node CountNodes = CountNodes + 1 print(Current.value) print("Count:", CountNodes) else: print("Empty list") # ENDIF; # END PrintNodesWithLoopAndCount. PrintNodesWithLoopAndCount() ################################## def FindANode(N): global HeadNode Current = HeadNode while ((Current.pointer != None) and (Current.value != N)): # DO Current = Current.pointer # ENDWHILE; # Print out and count for last node if (Current.pointer == None): # THEN print(N, "is not in the list") else: print("Found value:", Current.value) # ENDIF; # END FindANode. FindANode(33337) ################################## def InsertANode(Pos, N): global HeadNode Current = HeadNode nodeX = ListNode(N, None) PositionCounter = 1 CountNodes = 0 if Pos == 0: # THEN HeadNode = nodeX nodeX.pointer = Current else: while (Pos > PositionCounter): # DO Current = Current.pointer PositionCounter = PositionCounter + 1 # ENDWHILE; nodeX.pointer = Current.pointer Current.pointer = nodeX # ENDIF; # END InsertANode. InsertANode(2, 12345) PrintNodesWithLoopAndCount() ################################## def DeleteANode(N): global HeadNode Previous = None Current = HeadNode if Current.value == N: # THEN HeadNode = Current.pointer else: while ((Current.pointer != None) and (Current.value != N)): # DO Previous = Current Current = Current.pointer # ENDWHILE; Previous.pointer = Current.pointer # ENDIF; # END DeleteANode. DeleteANode(12345) PrintNodesWithLoopAndCount() ################################# ########## Q U E U E S ########## ################################# PrintNodesWithLoopAndCount() QueueHead = HeadNode; QueueTail = HeadNode; PrintNodesWithLoopAndCount() ################################## def CreateEmptyQueue(): global QueueHead global QueueTail QueueHead = QueueTail = None # END CreateEmptyQueue. CreateEmptyQueue() ################################## def QueueIsEmpty(): global QueueHead global QueueTail return QueueHead == QueueTail == None # END QueueIsEmpty. ################################## def PrintQueue(): global QueueHead global QueueTail QPrint = QueueHead print("Printing Queue...") while(QPrint != None): # DO print(QPrint.value) QPrint = QPrint.pointer # ENDWHILE; print("* End of Queue *") # END QueueIsEmpty. ################################## def AddToQ(N): global QueueHead global QueueTail nodeX = ListNode(N, None) if QueueIsEmpty(): # THEN QueueHead = nodeX; QueueTail = nodeX; else: QueueTail.pointer = nodeX QueueTail = nodeX # ENDIF; # END AddToQ. AddToQ(35) AddToQ(34) AddToQ(33) AddToQ(32) PrintQueue() ################################## def DeleteFromQ(): global QueueHead global QueueTail NewNode = QueueHead if QueueIsEmpty(): # THEN print("Queue is empty") N = 0 else: N = QueueHead.value QueueHead = NewNode.pointer # ENDIF; return N # END DeleteFromQ. DeleteValue = DeleteFromQ() print("Delete value:", DeleteValue) PrintQueue() ##################################