中缀表达式转后缀表达式 python
中缀表达式转后缀表达式 python这是之前数据结构学过的知识,现在忘了复习一下,如果有小伙伴对这方面的知识忘了的话我建议看这篇博客,讲的非常详细,我这里主要讲一下用代码实现的思路:初始一个存放结果的列表:result和存放操作符的栈op_stack从前往后遍历中缀表达式,处理一下四种情况:为数字:则直接添加到result后面为(:将其加入到操作符栈里面为):在op_stack中向前遍历将(之后的
·
中缀表达式转后缀表达式 python
这是之前数据结构学过的知识,现在忘了复习一下,如果有小伙伴对这方面的知识忘了的话我建议看这篇博客,讲的非常详细,我这里主要讲一下用代码实现的思路:
初始一个存放结果的列表:result和存放操作符的栈op_stack
从前往后遍历中缀表达式,处理一下四种情况:
- 为数字:则直接添加到result后面
- 为(:将其加入到操作符栈里面
- 为):在op_stack中向前遍历将(之后的操作符添加到result里面
- 为操作符:将op_stack中操作优先级大于等于当前操作符的操作符出栈将其添加到result后面
对于后缀表达式求值,就简单的多了,就从前往后遍历,遇到数字就进栈,遇到操作符就将栈顶的两个数出栈,运算之后将结果再进栈,遍历结束最后剩下的数字就是这个表达式的结果。
下面是我的代码:
def infixtopostfix(expression):
result=[] #用于存放结果的列表
op_stack=[] #用于存放操作符的栈
op_priority={'x':2,'/':2,'+':1,'-':1,'(':0,')':0}#操作符优先性字典
for i in expression:
if i.isdigit():
result.append(i)
elif i=="(":
op_stack.append(i)
elif i==")":
t=op_stack.pop()
while t!="(":
result.append(t)
t=op_stack.pop()
else:
while len(op_stack) !=0 and op_priority[op_stack[len(op_stack)-1]] >= op_priority[i]:
result.append(op_stack.pop())
op_stack.append(i)
while len(op_stack) !=0:
result.append(op_stack.pop())
return result
print(infixtopostfix("1+2x3-(4-5)"))
def calpostfix(expression):
res_stack=[]
for i in expression:
if i.isdigit():
res_stack.append(int(i))
else:
if i=="+":
t1=res_stack.pop()
t2=res_stack.pop()
res_stack.append(t1+t2)
elif i=="x":
t1=res_stack.pop()
t2=res_stack.pop()
res_stack.append(t1*t2)
elif i=="/":
t1=res_stack.pop()
t2=res_stack.pop()
res_stack.append(t2/t1)
else:
t1=res_stack.pop()
t2=res_stack.pop()
res_stack.append(t2-t1)
return res_stack[0]
print(calpostfix(infixtopostfix("1+2x3-(4-5)")))
运行结果为:
['1', '2', '3', 'x', '+', '4', '5', '-', '-']
8
更多推荐
已为社区贡献1条内容
所有评论(0)