中缀,后缀,前缀表达式转换
前言
中缀表达式转后缀表达式,后缀表达式转中缀表达式
提示:以下是本篇文章正文内容,下面案例可供参考
中缀转后缀方法
初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左至右处理各个元素,直到末尾。可能遇到三种情况:
1.遇到操作数。直接加入后缀表达式。
2. 遇到界限符 (、)。遇到 ( 直接入栈;遇到 ) 则依次弹出栈内运算符并加入后缀表达式,直到弹出 (。注意 ( ) 不加入后缀表达式。
3. 遇到 运算符。依次弹出栈中优先级 高于或等于 当前运算符的所有运算符,并加入后缀表达式。
举例
例1: A + B * (C - D)- E / F
中缀转后缀:
转换步骤
遇到 A 操作数,写入后缀表达式:A
遇到 “ + ”(运算符)入栈
遇到 B 操作数,写入后缀表达式:AB
遇到 “ * ”(运算符),当前没有优先级 高于或等于 当前 * 运算符,依旧入栈。
遇到 界限符 " ( "入栈。
遇到 C 操作数,写入后缀表达式: ABC
遇到 - 运算符,因为 - 在括号中,不弹出。
遇到 D 操作数,写入后缀表达式: ABCD
遇到 界限符 " ) " **(参照情况二)**开始从栈内弹出运算符到 " ) " 止。
此时栈内元素:
此时后缀表达式:ABCD -
遇到 - 运算符,入栈。此时 (参照情况三) 依次弹出 * - 运算符 (切记此时 “ - ” 不弹出) 。
此时栈内元素:
此时后缀表达式:ABCD - * +
遇到 E 操作数,写入后缀表达式: ABCD - * + E
遇到 / 运算符,因为 / 的优先级高于 - ,所以入栈
遇到 F 操作数,写入后缀表达式: ABCD - * + EF
因为没有了操作数,因此将栈内元素出栈
此时栈内情况:
后缀表达式:ABCD - * + EF / -
结束!
手算(应用考试)
例:A + B * (C - D)- E / F
按数学运算,1算(C - D),2算 B *,3算A +,4算E / F,最后算 - 。(如下图所示)
此时开始将每个小部分看作一个整体,将每个整体的运算符放到操作数后面。
第一部分:CD -
第二部分:BCD - *
第三部分:ABCD - * +
第四部分:EF /
第五部分:ABCD - * + E F / -
后缀转中缀方法
- 从左往右扫描下一个元素,直到处理完所有元素
- 若扫描到 操作数 则压入栈中,并回到 步骤1 ;否则执行 步骤3
- 若扫描到 运算符 ,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到1。
例: ABCD - * + E F / -
遇到 A 操作数,压入栈中
遇到 B 操作数,压入栈中
遇到 C 操作数,压入栈中
遇到 D 操作数,压入栈中
此时栈内元素:
遇到 “ - ”(运算符),弹出两个栈顶元素,将结果压回栈顶。( D先出,C再出,运算是:C - D)
此时栈内元素:
回到步骤1,再次扫描,此时扫描到 “ * ”(运算符),弹出两个栈顶元素,将结果压回栈顶。
此时栈内元素:
回到步骤1,再次扫描,此时扫描到 “ + ”(运算符),弹出两个栈顶元素,将结果压回栈顶。
此时栈内元素:
回到步骤1,再次扫描,扫描到E,入栈。
扫描到F,入栈。
此时栈内元素:
遇到 “ / ”(运算符),弹出两个栈顶元素,将结果压回栈顶。
此时栈内元素:
回到步骤1,再次扫描,此时扫描到 “ - ”(运算符),弹出两个栈顶元素,将结果压回栈顶。
此时栈内元素:
此时可直接输出结果!
中缀转前缀步骤
此时开始将每个小部分看作一个整体,将每个整体的运算符放到操作数前面。
第一部分:- CD
第二部分:* B - CD
第三部分:+ A * B - CD
第四部分:/ EF
第五部分:- + A * B - CD / EF