1.题目描述
给定一个后缀表达式,计算后缀表达式的值。
注意:
1.后缀表达式由一系列以空格分开的token组成
2.相关概念见这里
2.代码
#栈的实现(利用列表)
class Stack:
def __init__(self):
self.items=[]
def isEmpty(self):
return self.items==[]
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.item)
#求值函数
def postfixEval(postfixExpr):
#储存操作数的栈
operandStack=Stack()
#把字符串转化为由所有token组成的列表
tokenList=postfixExpr.split()
#遍历列表
for token in tokenList:
#数字压入栈中
if token in "0123456789":
operandStack.push(int(token))
#遇到操作符,连续pop两个操作数进行运算后压入栈中
else:
operand2=operandStack.pop()
operand1=operandStack.pop()
result=doMath(token,operand1,operand2)
operandStack.push(result)
#返回栈中的最后一个数,也就是结果
return operandStack.pop()
#定义数学运算函数
def doMath(op,op1,op2):
if op=='*':
return op1 * op2
elif op=='/':
return op1 / op2
elif op=='+':
return op1 + op2
elif op=='^':
return op1**op2
else:
return op1 - op2
print(postfixEval('5 1 + 2 * 3 / 3 2 8 4 / + ^ 9 / - 6 +'))
print(postfixEval('1 2 + 3 + 4 + 5 +'))
print(postfixEval('1 2 3 4 5 * + * +'))