为了便于将算术表达式转换为后缀表达式的算法实现,我们增加运算符‘#’,并将其放在表达式的末尾。

设运算符优先级顺序为:

① #,②(,③‘,’,③+或-,④*或÷,⑤smox;(括号另外处理)

实现过程如下:

1:新建一个字符栈和数组,分别存放运算符和操作数,并用‘#’初始化字符栈。

2:从左向右遍历表达式,并作以下处理:

①:若是操作数,直接存入数组;

②:若是运算符‘(’,入栈;若是运算符‘(’,字符栈依次出栈,并将出栈元素存入数组,直到遇到运算符‘(’为止,将‘(’直接出栈,并且不放入数组;

③:若是‘,’,字符栈的运算符依次出栈,直到遇到‘(’为止(‘(’不出栈,‘,’不进栈)。

③:若是其他运算符,比较其与栈顶运算符的优先级,若高,则入栈,否则,栈顶的运算符依次出栈,存放到后缀表达式数组,直到栈顶元素的优先级低于该运算符,此时将该运算符入栈。

④:若是‘#’,栈顶元素依次出栈,存放到后缀表达式数组。

 

posted on 2018-09-04 13:05  爱磕盐的小生  阅读(1066)  评论(0编辑  收藏  举报