# 双栈表达式求值
# 栈的实现
class Lstack():
def __init__(self,top=-1,full=20):
self._top = top
self._stack=[]
self.full = full
def is__full(self):
return self.full == self._top+1
def is_empty(self):
return self._top == -1
def push(self,x):
if self.full == self._top+1:
print("堆栈已满")
else:
self._stack.append(x)
self._top += 1
def pop(self):
if self._top == -1:
print("堆栈为空,不可弹出")
else:
top =self._top
self._top -= 1
return self._stack.pop(top)
# 定义表达式求值函数
def findValue(chr_of_num): #字符形式的表达式
chr_it = chr_of_num.split() # 转为字符列表
operate_stack = Lstack()
num_stack = Lstack()
for i in chr_it:
if isinstance(eval(i),int):
num_stack.push(eval(i))
elif i == ')':
op = operate_stack.pop()
a = num_stack.pop()
b= num_stack.pop()
if op=='+':
c = a+b
elif op == '-':
c=b-a
elif op =='*':
c=a*b
else:
c=b/a
num_stack.push(c)
elif i =="(":
pass
else:
operate_stack.push(i)
return num_stack.pop()
if __name__=='__main__':
a=findValue('(1+((2+3)*(4*5)))')
print(a)
双栈计算表达式实现
猜你喜欢
转载自blog.csdn.net/tommy1295/article/details/80938064
今日推荐
周排行