iyidgnaw
5/12/2018 - 1:42 AM

structure.py

class Stack():

   def __init__(self):

      self.stack = []


   def push(self,item):
      self.stack.append(item)


   def pop(self):
      if self.isEmpty():
         return None
      else:
         return self.stack.pop()

   def peek(self):
      if self.isEmpty():
         return None
      else:
         return self.stack[-1]

   def isEmpty(self):
      return self.stack == []

   def size(self):
      return len(self.stack)


class Queue():

   def __init__(self):
      self.queue = []

   def enqueue(self,item):
      self.queue.append(item)

   def dequeue(self):
      if self.isEmpty():
         return None
      else:
         return self.queue.pop(0)

   def isEmpty(self):
      return self.queue == []

   def size(self):
      return len(self.queue)

class Node():

   def __init__(self, value=0):
      self.val = value
      self.next = None


class UnorderedList:

   def __init__(self):
      self.head = None

   def size(self):

      cur = self.head
      length = 0
      while(cur!=None):
         length += 1
         cur = cur.next
      return length

   def empty(self):
      return self.head==None

   def value_at(self,index):
      if index>self.size():
         raise IndexError
      else:
         cur = self.head
         while(index>0):
            cur = cur.next
            index-=1
         return cur.val

   def push_front(self,value):
      temp = Node(value)
      if self.empty():
         self.head = temp
      else:
         temp.next = self.head
         self.head = temp

   def pop_front(self):
      if self.empty():
         return None
      else:
         temp = self.head
         self.head = self.head.next
         return temp.val

   def push_back(self,value):
      if self.empty():
         temp = Node(value)
         temp.next = None
         self.head = temp
      else:
         cur = self.head
         while(cur.next!=None):
            cur = cur.next
         temp = Node(value)
         temp.next = None
         cur.next = temp

   def pop_back(self):
      if self.empty():
         return None
      if self.head.next == None:
         temp = self.head.val
         self.head = None
         return temp
      else:
         cur = self.head
         while(cur.next.next!=None):
            cur = cur.next
         temp = cur.next.val
         cur.next = None
         return temp

   def display(self):
      print("current in linklist:")
      cur = self.head
      while(cur!=None):
         print(cur.val)
         cur = cur.next

class OrderedList:

   def __init__(self):
      self.head = None

   def size(self):

      cur = self.head
      length = 0
      while(cur!=None):
         length += 1
         cur = cur.next
      return length

   def empty(self):
      return self.head==None

   def value_at(self,index):
      if index>self.size():
         raise IndexError
      else:
         cur = self.head
         while(index>0):
            cur = cur.next
            index-=1
         return cur.val

   def add(self,item):
      """
      Brilliant Method for the add function for ordered linked list
      use two pointer
      the previous is always pointing at the last element.
      this is super cool!!!
      """
      current = self.head
      previous = None
      stop = False
      while current != None and not stop:
         if current.getData() > item:
            stop = True
         else:
            previous = current
            current = current.getNext()

      temp = Node(item)
      if previous == None:
         temp.setNext(self.head)
         self.head = temp
      else:
         temp.setNext(current)
         previous.setNext(temp)



class Heap:

   def __init__(self):
      self.heaplist = [0]
      self.currentSize = 0

   def percUp(self,i):
      while i //2>0:
         if self.heaplist[i//2]<self.heaplist[i]:
            self.heaplist[i//2],self.heaplist[i] = self.heaplist[i], self.heaplist[i//2]
         i = i//2
      return 
   
   def insert(self,x):
      self.heaplist.append(x)
      self.currentSize+=1
      self.percUp(currentSize)
      return