今天,我给大家介绍一下中缀表达式、后缀表达式和前缀表达式,以及三者之间的转换。
中缀表达式:是一个通用的算术或逻辑公式表示方法。通俗来说就是我们现在人为使用的表达式,例如3+4,而这种表达式是方便人查看的。
前缀表达式:又称波兰式,是指运算符在运算数之前的表达式,例如+ 3 4。
后缀表达式:又称逆波兰式,是指运算符在运算数之后的表达式,例如3 4 +。前缀表达式和后缀表达式都是利于机器查看的。
以中缀表达式 X=A+B*(C-D)/E为例
中缀表达式转换成前缀表达式(1):
1、初始化两个栈,栈s1用来存运算数,栈s2用来存运算符。
2、表达式从右边开始,依次遍历表达式。
3、遍历表达式时遇到运算数放入s1栈中,遇到运算符放入s2栈中,放置运算符的规则是:
(1)如果s2栈中是空的,或者是‘)’,则将运算符直接放入。
(2)如果当前运算符和s2栈中栈顶运算符相比较优先级高的话,则将运算符直接放入。
(3)如果当前运算符的优先级低于栈顶元素优先级,则把s2栈中的栈顶运算符取出放入到s1栈中,并重复(2)(3)操作。
4、s2依次出栈,入s1栈。
5、s1栈中元素依次出栈,重新组成表达式。
中缀表达式转换成前缀表达式(2):
1、遍历中缀表达式,根据中缀表达式的运算规则在每个运算符的两端加括号。
2、所有的括号加完以后,再根据之前加括号的顺序依次将运算符挪到对应括号的前面。
3、去除所有的括号,重新组成表达式。
中缀表达式转换成后缀表达式(1):
1、初始化两个栈,栈s1用来存运算数,栈s2用来存运算符。
2、表达式从左边开始,依次遍历表达式。
3、遍历表达式时遇到运算数放入s1栈中,遇到运算符放入s2栈中,放置运算符的规则是:
(1)如果s2栈中是空的,或者是‘(’,则将运算符直接放入。
(2)如果当前运算符和s2栈中栈顶运算符相比较优先级高的话,则将运算符直接放入。
(3)如果当前运算符的优先级小于等于栈顶元素优先级,则把s2栈中的栈顶运算符取出放入到s1栈。
(4)遇到‘)’时,运算符出栈,入s1栈,直到遇到‘(’时,丢掉‘()’
4、s1依次出栈,入s2栈。
5、s2栈中元素依次出栈,重新组成表达式。
中缀表达式转化成后缀表达式(2):
1、遍历中缀表达式,根据中缀表达式的运算规则在每个运算符的两端加括号。
2、所有的括号加完以后,再根据之前加括号的顺序依次将运算符挪到对应括号的后面。
3、去除所有的括号,重新组成表达式。