前缀、中缀、后缀表达式

一、表达式转换

 1、前缀表达式又称前缀记法或者波兰式,它的运算符位于操作数之前,便于机器查看。例如:+ 3 4 (3+4)

 2、中缀表达式是最常用的一种表达式,它的运算符位于操作数中间,便于人为观察或操作。例如:3 + 4 (3+4)

 3、后缀表达式又称逆波兰式,它的运算符位于操作数之后。例如:3 4 + (3+4)

 4、中缀到后缀表达式的转换:   例如:X = A+ B * ( C - D ) / E

    (1)先判断优先级,搞清楚运算顺序,在所有运算符左右都加上小括号。

       a、( C - D )

       b、( B * ( C - D ))

       c、(( B *( C - D )) / E)

       d、( A + (( B * ( C - D )) / E))

       e、( X =( A +(( B *( C - D )) / E)))

    (2)移动运算符:将所有的运算符都放在它相对应的小括号后面。

       a、( C D ) -

       b、( B ( C D ) -) *

       c、(( B( C D ) -) * E) /

       d、( A (( B( C D ) -) * E) / ) +

       e、( X ( A (( B( C D ) -) * E) / ) + ) =

     (3)去掉小括号将操作数和运算符依次写出来。

        所求后缀表达式为: X A B C D - * E / + =

 5、中缀到前缀表达式的转换:   例如:X = A+ B * ( C - D ) / E

     (1)先判断优先级,搞清楚运算顺序,在所有运算符左右都加上小括号。  (和后缀转换一样的方法)

       a、( C - D )

       b、( B * ( C - D ))

       c、(( B *( C - D )) / E)

       d、( A + (( B * ( C - D )) / E))

       e、( X =( A +(( B *( C - D )) / E)))

     (2)移动运算符:将所有的运算符都放在它相对应的小括号前面。

       a、 - ( C D )

       b、 * ( B - ( C D )

       c、 / ( *( B -( C D )) E)

       d、 + ( A / ( *( B -( C D )) E))

       e、= ( X +( A ( /( *( B -( C D )) E)))

     (3)去掉小括号将操作数和运算符依次写出来。

        所求前缀表达式为: = X + A / * B - C D E


        注意:运算符优先级的判断

              运算符的移动

           

       




### 前缀中缀后缀表达式的练习题 以下是针对前缀中缀后缀表达式的常见练习题目,涵盖了它们的转换与求值过程: #### 转换类题目 1. **将下列中缀表达式分别转换为前缀表达式和后缀表达式:** - \( A + B \times C \)[^1] - \( (A + B) \times (C - D) \)[^2] - \( A / B + C \times D \)[^3] 2. **已知后缀表达式,将其还原为中缀表达式并验证结果:** - 输入后缀表达式 `AB+C*`,写出对应的中缀表达式[^4]。 3. **给定前缀表达式,将其转换为中缀表达式:** - 输入前缀表达式 `+ * A B C`,写出对应的中缀表达式[^5]。 #### 求值类题目 1. **计算以下后缀表达式的值:** - 输入后缀表达式 `8 2 + 5 *`,计算其结果[^3]。 2. **计算以下前缀表达式的值:** - 输入前缀表达式 `- + 7 8 9`,计算其结果[^2]。 3. **输入一个复杂的中缀表达式,通过程序实现将其转换为后缀表达式后再求值:** - 中缀表达式:\( ((A + B) \times C) - (D / E) \)[^4]。 #### 应用类题目 1. **设计一个函数,能够接收任意形式的表达式(前缀中缀或后缀),并通过栈或其他数据结构完成求值。** 2. **编写一段代码,利用表达式树的方法将中缀表达式转换为后缀表达式,并给出具体步骤说明。** --- ```python # 示例代码:使用栈来计算后缀表达式的值 def evaluate_postfix(expression): stack = [] operators = set(['+', '-', '*', '/']) for char in expression.split(): if char not in operators: stack.append(int(char)) else: b = stack.pop() a = stack.pop() if char == '+': result = a + b elif char == '-': result = a - b elif char == '*': result = a * b elif char == '/': result = int(a / b) stack.append(result) return stack[-1] expression = "8 2 + 5 *" print(evaluate_postfix(expression)) # 输出应为 50 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值