Lecture Notes on 01 Mar 2017 class Link (object): def __init__ (self, data, next = None): self.data = data self.next = next class LinkedList (object): def __init__ (self): self.first = None def insertFirst (self, data): newLink = Link (data) newLink.next = self.first self.first = newLink def insertLast (self, data): newLink = Link (data) current = self.first if (current == None): self.first = newLink return while (current.next != None): current = current.next current.next = newLink def findLink (self, data): current = self.first if (current == None): return None while (current.data != data): if (current.next == None): return None else: current = current.next return current def deleteLink (self, data): current = self.first previous = self.first if (current == None): return None while (current.data != data): if (current.next == None): return None else: previous = current current = current.next if (current == self.first): self.first = self.first.next else: previous.next = current.next return current # Read a valid RPN string and calculate its value class Stack (object): def __init__ (self): self.stack = [] # add an item to the top of the stack def push (self, item): self.stack.append (item) # remove an item from the top of the stack def pop (self): return self.stack.pop() # check what an item is on the top of the stack def peek (self): return self.stack[-1] # check if stack is empty def isEmpty (self): return (len(self.stack) == 0) # return the number of elements in the stack def size (self): return (len(self.stack)) def operate (oper1, oper2, token): if (token == "+"): return oper1 + oper2 elif (token == "-"): return oper1 - oper2 elif (token == "*"): return oper1 * oper2 elif (token == "/"): return oper1 / oper2 def rpn (s): theStack = Stack () operators = ['+', '-', '*', '/'] tokens = s.split() for item in tokens: if (item in operators): oper2 = theStack.pop() oper1 = theStack.pop() theStack.push (operate (oper1, oper2, item)) else: theStack.push (float(item)) return theStack.pop() def main(): in_file = open ("rpn.txt", "r") for line in in_file: line = line.strip () value = rpn (line) print (line, " = ", value) in_file.close() main()