stack
import sys
class Stack:
def __init__(self):
self.items=[]
def push(self,item):
try:
self.items.append(item)
except:
print sys.exc_info()
def pop(self):
try:
self.items.pop()
except:
print sys.exc_info()
def clear(self):
try:
del self.items[:]
except:
print sys.exc_info()
def empty(self):
return len(self.items)==0
def size(self):
return len(self.items)
def top(self):
try:
return self.items[self.size()-1]
except:
print sys.exc_info()
逆波兰
import stack
def evalRPN(tokens):
operators="+-*/"
stacktemp=stack.Stack()
for item in tokens:
#print item,"======================"
#print stacktemp.items
if operators.find(item)==-1:
stacktemp.push(item)
else:
leftn=int(stacktemp.top())
stacktemp.pop()
rightn=int(stacktemp.top())
stacktemp.pop()
if item=='+':
stacktemp.push(str(leftn+rightn))
elif item=='-':
stacktemp.push(str(rightn-leftn))
elif item=='*':
stacktemp.push(str(leftn*rightn))
elif item=='/':
stacktemp.push(str(rightn/leftn))
returnValue=int(stacktemp.top())
stacktemp.pop()
return returnValue
if __name__=="__main__":
tokens= ["2", "1", "+", "3", "*"]
print evalRPN(tokens)