22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值

前言

在本篇文章当中主要跟大家介绍以下几点

  • 前缀、中缀和后缀表达式。
  • 如何将中缀表达式转化成后缀表达式。
  • 如何使用后缀表达式进行求值。

表达式求值这是一个比较经典的计算机系统基础问题,但是整个过程比较抽象,本文主要通过图解的方法帮助大家理解这个问题。

表达式介绍

后缀表达式也称作逆波兰表达式,前缀表达式也称作波兰表达式,这个是因为这是由波兰数学家 杨-武卡谢维奇 提出来的,用于简化命题逻辑的一种方法。

中缀表达式

我们常见的数学表达式就是中缀表达式,比如说: \(1 + 2\) ,像这种我们从小到大经常见到的表达式就叫做中缀表达式,这个表达式的特点就是将 运算符 (加减乘除)放在两个操作数(数字)中间。

后缀表达式

后缀表达式和中缀表达式的最大区别就是,他不是将 运算符 放在 操作数 中间,而是将 运算符 放在 操作数 后面,比如上面的中缀表达式 \(1 + 2\) 转化成后缀表达式就为 \(12+\) 。

前缀表达式

前缀表达式就是将 运算符 放在 操作数 的前面,比如上面的中缀表达式 \(1 + 2\) 转化成前缀表达式之后为 \(+12\) 。

表达式之间转化的例子

上面的表达式还是比较简单,可能不足以帮助大家好好理解表达式之间的转化过程。

中缀表达式: \(A + B * (C - D) - E / F\)

现在我们来将上面的中缀表达式转化成后缀表达式,我们的第一个计算的部分如下(括号里面的优先计算):

22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值_第1张图片

根据我们的转化原理:将 运算符 放在 操作数 后面,

22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值_第2张图片

上面的得到的后缀表达式继续进行转化(现在需要计算 \(B\) 乘以后面的那个部分):

22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值_第3张图片

继续进行转化(从左往后进行计算):

你可能感兴趣的:(程序员,Java,计算机,java,servlet,数据库)