中缀表达式5+4*(x+3)-6所对应的后缀表达式为

发布时间 2023-11-13 00:17:20作者: 龙陌

中缀表达式5+4*(x+3)-6所对应的后缀表达式为( )

中缀表达式转换为后缀表达式的一种常用方法是使用栈来处理。下面是将中缀表达式转换为后缀表达式的步骤:

从左到右扫描中缀表达式的每个元素。
如果遇到操作数,直接输出。
如果遇到运算符,使用栈来处理:若栈为空或者栈顶元素为左括号,则直接将运算符入栈;否则比较当前运算符和栈顶运算符的优先级,如果当前运算符的优先级高于栈顶运算符,则直接入栈;否则将栈顶元素出栈并输出,继续比较直到满足条件为止,然后将当前运算符入栈。
如果遇到左括号,则入栈。
如果遇到右括号,则将栈中的元素依次出栈并输出,直到遇到左括号。
根据以上步骤,我们来将中缀表达式5+4*(x+3)-6转换为后缀表达式:

中缀表达式:5 + 4 * (x + 3) - 6

对应的后缀表达式为:5 x 4 3 + * + 6 -

前缀,中缀,后缀表达式规则 [数据结构][Java]
https://blog.csdn.net/m0_57001006/article/details/126839120

前缀,中缀,后缀表达式规则
前缀表达式:
前缀表达式又称之为: 波兰表达式
前缀表达式的运算符位于操作数之前
前缀表达式举例:
(3 + 4) x 5 - 6 转换为前缀表达式之后是: - x + 3 4 5 6

前缀表达式的计算机求值:
从右至左扫描表达式,遇到数字时,将数字压入堆栈中,遇到运算符的时候就弹出栈顶的两个数,用运算符对它们做相应的计算,并将结果入栈,重复上述过程直到遍历到表达式的最左端,最后运算得出的值即为表达式的结果

中缀表达式:
中缀表达式就是常见的运算表达式,如(3 + 4) x 5 - 6

中缀表达式的求值是我们人类最熟悉的,但是对于计算机来说却不好操作,因此,在计算中缀表达式的结果的时候往往会将其转换成其他表达式来操作(一般情况之下都是转换成为后缀表达式)

前面的用栈实现总和计算器的时候我们处理的就是中缀表达式,中缀表达式处理起来比较麻烦
后缀表达式:
后缀表达式又称为"逆波兰表达式" , 与前缀表达式相似,只是运算符位于操作数之后
后缀表达式举例:
(3 + 4) x 5 - 6 转换为后缀表达式就是: 3 4 + 5 * 6 -

后缀表达式的计算机求值:
从左至右扫描表达式,遇到数字时,将数字压入堆栈中,遇到运算符时,弹出栈顶的两个数(栈顶元素和次栈顶元素),用运算符对它们做相应的运算,并将结果入栈 , 重复上述的过程直到遍历到表达式的最右边, 最后运算得出的值即为表达式的运算结果

补充:
注意 : 我们使用中缀表达式进行计算机求值的时候要使用两个栈,但是使用后缀表达式和前缀表达式求值的时候只需要使用一个栈

前缀表达式就是运算符在前面, 后缀表达式就是运算符在数值的后面 , 中缀表达式就是运算符在数值的中间

但是注意: 我们这里说的前缀和后缀表达式的运算符在前面和在后面并不是完全就在数值的后面 —> 这里我们以后缀表达式为例: 我们是这次的运算的数值在前面,这次运算运算符在后面,但是这个运算符后面可能还会有其他的数值,而这些数值的运算符在它们的后面
总结一下: 其实就是中缀表达式就是两个数值之间就是运算符,而后缀表达式就是数值在前面,运算符在后面(前缀表达式和后缀表达式之间可以进行类比)
对于前缀和后缀表达式的计算机求值的思路简记:

我们肯定是要将数值入栈,然后将符号入栈,所以我们就可以从而确定执行的方向,是从左至右还是从右至左,至于具体的运算的细节其实两种方式都是一样的: 都是遇到运算符之后就弹出栈顶的两个数值,然后进行一个运算,运算之后将结果再入栈 , 直到最后栈中就会只剩下一个数值, 这个数值就是我们要求的最终结果
注意: 前缀是从右向左扫描, 而后缀是从左向右扫描