前缀、中缀、后缀表达式介绍、相互转换以及计算机计算过程(入栈出栈规则)

概述

前缀、中缀、后缀表达式是表达式的不同记法,其区别在于运算符相对于操作数的位置,前缀表达式的运算符位于操作数之前,中缀表达式的运算符位于操作数中间,表达式的运算符位于操作数之后,
如:

  • 中缀表达式:1+2-3×4
  • 前缀表达式:- + 1 2 × 3 4 (最后一个运算符与右边两个操作数结合进行运算,依次计算下去)
  • 后缀表达式:3 4 × 1 2 + - (第一个运算符与左边两个操作数结合进行运算,依次计算下去)

中缀表达式

  • 中缀表达式是一种通用的算术或逻辑公式表示方法,运算符位于操作数的中间。中缀表达式是我们常用的表达式。
  • 因为我们平时经常使用中缀表达式,所有我们对中缀表示式比较熟悉;但中缀表达式对计算机来说却是很难理解的;所以计算机在计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。

前缀表达式

前缀表达式的运算符位于两个相应操作数之前,前缀表达式又被称为前缀记法或波兰式,前缀表达式没有括号,因为其已经含有运算顺序,

计算机计算过程

  • 从右往左扫描表达式扫到数字就让数字入栈,

  • 扫到运算符就让栈顶的两个数出栈,用该运算符对它们做相应的计算,并将结果入栈

  • 重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果

  • 用一句话概述:最后一个运算符与右边两个操作数结合进行运算,依次计算下去
    例:
    列出求解表达式- + 1 2 × 3 4的过程

    • 从右往左扫描表达式,将扫到的数字4 3入栈
    • 扫到 * 运算符,将3 4出栈,执行3×4,并将结果12入栈
    • 继续扫描,将表达式数字2 1入栈,
    • 扫到 + 运算符,将1 2出栈,执行1+2,并将结果3入栈
    • 扫到 - 运算符,将3 12出栈,执行3-12,结果-9为表达式解

中缀表达式转化为前缀表达式

  1. 按照运算符的优先级对所有的运算单位加括号,如(1+2)
  2. 将运算符移动到对应括号的前面,如+(1 2)
  3. 去掉括号,得到后缀表达式,如+ 1 2
    例:
    将中缀表达式:2/1-3×4转化为前缀表达式
    1、加括号
    ((2/1)-(3×4))
    2、移动运算符
    -((/21)(×34))
    3、去掉括号
    前缀表达式: - / 2 1 × 3 4

后缀表达式

前缀表达式的运算符位于两个相应操作数之前,后缀表达式也被称为后缀记法或逆波兰式,后缀表达式没有括号,因为其已经含有运算顺序,

计算机计算过程

计算过程与前缀表达式类似,只是顺序是从左至右:

  • 从左至右扫描表达式遇到数字时,将数字压入堆栈,
  • 遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素op 栈顶元素 ),并将结果入栈
  • 重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果
  • 用一句话概述:最后一个运算符与右边两个操作数结合进行运算,依次计算下去
    例:
    列出求解表达式3 4 * 1 2 + - 的过程
    • 从左往右扫描表达式,将扫到的数字3 4入栈
    • 扫到 * 运算符,将4 3出栈,执行4*3,并将结果12入栈
    • 继续扫描,将表达式数字1 2入栈,
    • 扫到 + 运算符,将2 1出栈,执行2+1,并将结果3入栈
    • 扫到 - 运算符,将3 12出栈,执行3-12,结果-9为表达式解

中缀表达式转化为后缀表达式

方法一 直接法

  1. 按照运算符的优先级对所有的运算单位加括号,如(1+2)
  2. 将运算符移动到对应括号的后面,如(1 2)+
  3. 去掉括号,得到后缀表达式,如1 2+
    例:
    将中缀表达式:2/1-3×4转化为后缀表达式
    1、加括号
    ((2/1)-(3×4))
    2、移动运算符
    ((21/)(34×))-
    3、去掉括号
    后缀表达式:2 1 / 3 4 × -
发布了85 篇原创文章 · 获赞 158 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Late_whale/article/details/104496984