MirzaMdAzwad

Stacks and Queues using Linked Lists

Feb 9th, 2020
106
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Node:
  2.     def __init__(self,value):
  3.         self.down=None
  4.         self.up=None
  5.         self.value=value
  6. class stack:
  7.     def __init__(self):
  8.         self.BottomOfStack=None
  9.         self.TopOfStack=None
  10.     def push(self,value,TopOfStack=None):
  11.         if self.BottomOfStack==None:
  12.             self.BottomOfStack=Node(value)
  13.             return
  14.  
  15.         if TopOfStack==None:
  16.             TopOfStack=self.BottomOfStack
  17.  
  18.         if TopOfStack.up==None:
  19.             TopOfStack.up=Node(value)
  20.             TopOfStack.up.down=TopOfStack
  21.             self.TopOfStack=TopOfStack.up
  22.             TopOfStack=self.TopOfStack
  23.         else:
  24.             self.push(value,TopOfStack.up)
  25.     def pop(self):
  26.         if self.TopOfStack==None or self.BottomOfStack==None:
  27.             print("Stack is empty")
  28.             return
  29.         if self.TopOfStack.value==None or self.TopOfStack.up==self.BottomOfStack:
  30.             print("Empty Stack")
  31.             return
  32.         if self.TopOfStack==self.BottomOfStack:
  33.             popped=self.TopOfStack.value
  34.             self.TopOfStack=self.TopOfStack.down
  35.             self.BottomOfStack=self.BottomOfStack.down
  36.             return popped
  37.         else:
  38.             popped=self.TopOfStack.value
  39.             self.TopOfStack=self.TopOfStack.down
  40.             self.TopOfStack.up=None
  41.             return popped
  42.        
  43.        
  44.     def ViewAll(self, BottomOfStack=None):
  45.         if self.BottomOfStack==None:
  46.             print("Full Stack: Stack is empty")
  47.             return
  48.         if BottomOfStack==None:
  49.             BottomOfStack=self.BottomOfStack
  50.             print("Full Stack: ",end="=> ")
  51.             print(BottomOfStack.value,end=", ")
  52.         if BottomOfStack.up!=None:
  53.             print(BottomOfStack.up.value,end=", ")
  54.             self.ViewAll(BottomOfStack.up)
  55.         else:
  56.             print()
  57.     def peek(self):
  58.         if self.BottomOfStack!=None:
  59.             return self.BottomOfStack.value
  60.         else:
  61.             return "Stack is empty"
  62.  
  63.  
  64. class node:
  65.     def __init__(self,value):
  66.         self.left=None
  67.         self.right=None
  68.         self.value=value
  69. class queue:
  70.     def __init__(self):
  71.         self.head=None
  72.         self.tail=None
  73.     def add(self,value,head=None):
  74.         if self.head==None:
  75.             self.head=node(value)
  76.             return
  77.  
  78.         if head==None:
  79.             head=self.head
  80.  
  81.         if head.right==None:
  82.             head.right=node(value)
  83.             head.right.left=head
  84.             self.tail=head.right
  85.  
  86.         else:
  87.             self.add(value,head.right)
  88.     def remove(self):
  89.         if self.head==None or self.tail==None:
  90.             print("Queue is empty")
  91.             return
  92.         if self.head.value==None or self.head.left==self.tail:
  93.             return
  94.         if self.head==self.tail:
  95.             removed=self.head.value
  96.             self.head=self.head.right
  97.             self.tail=self.tail.right
  98.             return removed
  99.         else:
  100.             removed=self.head.value
  101.             self.head=self.head.right
  102.             self.head.left=None
  103.             return removed
  104.     def peek(self):
  105.         if self.head!=None:
  106.             return self.head.value
  107.         else:
  108.             return "Queue is empty"
  109.     def ViewAll(self,head=None):
  110.         if self.head==None:
  111.             print("Full Queue: Queue is empty")
  112.             return
  113.         if head==None:
  114.             head=self.head
  115.             print("Full Queue: ",end="=> ")
  116.             print(head.value,end=", ")
  117.         if head.right!=None:
  118.             print(head.right.value,end=", ")
  119.             self.ViewAll(head.right)
  120.         else:
  121.             print()
  122. if __name__=="__main__":
  123.     print("###################################################################Stack###################################################################")
  124.     s=stack()
  125.     s.push("Potato")
  126.     print(s.peek())
  127.     s.push("Tomato")
  128.     s.ViewAll()
  129.     print("Popped:",s.pop())
  130.     print("Popped:",s.pop())
  131.     print(s.peek())
  132.     s.ViewAll()
  133.     s.push("Potatito")
  134.     s.push("Tomatino")
  135.     s.push("I' m Batman")
  136.     print(s.peek())
  137.     s.ViewAll()
  138.     print("###################################################################Queue###################################################################")
  139.     q = queue()
  140.     q.add("Tomato")
  141.     q.add("Potato")
  142.     q.ViewAll()
  143.     print(q.peek())
  144.     print("Removed: ",q.remove())
  145.     print(q.peek())
  146.     print("Removed: ",q.remove())
  147.     q.ViewAll()
  148.     print(q.peek())
  149.     q.add("Watermelon")
  150.     q.add("Potato")
  151.     q.add("Tomato")
  152.     print(q.peek())
  153.     print("Removed: ",q.remove())
  154.     print(q.peek())
  155.     print("Removed: ",q.remove())
  156.     print(q.peek())
RAW Paste Data