您的位置:首页 > 编程语言 > C语言/C++

中缀表达式得到后缀表达式(c++、python实现)

2018-07-12 21:17 393 查看

将中缀表达式转换为后缀表达式的算法思想如下:

  从左往右开始扫描中缀表达式

  遇到数字加入到后缀表达式

  遇到运算符时:

    1、若为‘(’,入栈

    2、若为’)‘,把栈中的运算符依次加入后缀表达式,直到出现'(',’(‘出栈,退出该次循环

    3、若除’(‘ 和 ‘)’,要入栈的运算符优先级大于等于栈顶的运算符的优先级,直接入栈,否者,栈顶运算符出栈,再次比较,直到出现优先级低的运算符,或者栈为空,退出

  中缀表达式为空时,若栈不为空,栈中元素一直出栈,直到栈为空

 

运算符    (  *,/  +,-  )

栈内优先级  1  5  3    6

栈外优先级  6  4  2    1

C++实现如下:

#-*- coding:utf-8 -*-

if __name__=='__main__':
s_mid='23/b+(c*d-e*f)/g'
s_beh=''
d={'(':0,')':0,'+':1,'-':1,'*':2,'/':2};
l=[]
while(len(s_mid)):
if s_mid[0] in d.keys():
if s_mid[0]==')':
while True:
if l[len(l)-1]=='(':
break
else:
s_beh+=l.pop()
l.pop()
elif len(l)==0 or s_mid[0]=='(' or d[l[len(l)-1]]<d[s_mid[0]]:
l.append(s_mid[0])
elif d[l[len(l)-1]]>=d[s_mid[0]]:
while d[l[len(l) - 1]] >= d[s_mid[0]]:
s_beh+=l.pop()
if len(l)==0:
break
l.append(s_mid[0])
else:
s_beh+=s_mid[0]
s_mid=s_mid[1:]
if len(s_mid)==0:
while len(l):
s_beh += l.pop()
print s_beh
View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: