前缀表达式、中缀表达式、后缀表达式

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐如果觉得文章写的不错,欢迎点个关注一键三连有写的不好的地方也欢迎指正,一同进步

目录

  • 前缀表达式
  • 中缀表达式
  • 后缀表达式
  • 中缀表达式转后缀表达式
  • 总结

写在前面:这篇文章作为一个引入,后续会更新关于代码如何实现三种表达式
前缀表达式、中缀表达式、后缀表达式_第1张图片

前缀表达式

  前缀表达式是一种数学表达式的表示方法,其中运算符位于操作数之前。它也被称为波兰表达式(Polish Notation),以波兰数学家 Jan Łukasiewicz 的名字命名。

  前缀表达式的形式是:操作符 + 操作数1 + 操作数2 + …

  例如,“+ 3 4” 表示将加法运算符 “+” 应用于操作数 3 和 4。这个前缀表达式的求值方式是从右到左,先计算运算符之后的两个操作数,然后将结果作为新的操作数进行下一步计算。

具体求值的过程如下:

  1. 从右到左读取表达式,首先遇到的是数字 4,将其压入栈中。
  2. 继续向左读取,下一个是数字 3,将其压入栈中。
  3. 继续向左读取,下一个是运算符 “+”。
  4. 弹出栈顶的两个操作数(4 和 3),执行加法运算得到结果 7。
  5. 将结果 7 压入栈中。 最终栈中只有一个元素,即计算结果 7。

因此,“+ 3 4” 的前缀表达式的求值结果为 7。

  前缀表达式的优点是它没有括号,并且运算符的优先级是明确的。它可以通过递归或栈数据结构来求值。前缀表达式在计算机科学中有一定的应用,例如在编译器设计、算术表达式的计算和逻辑推理等领域。它也是后缀表达式的一种转换形式,可以通过将中缀表达式转换为前缀表达式,再将前缀表达式转换为后缀表达式来简化表达式的求值过程。

中缀表达式

  中缀表达式是一种常见的数学表达式的表示方法,其中运算符位于操作数之间。它是我们通常使用的数学表达式形式,如 “3 + 4” 或 “(5 * 2) - 7”。

  中缀表达式的计算顺序由运算符的优先级和括号来确定。常见的运算符优先级规则如下:

  1. 括号具有最高优先级,可以用于改变默认的运算顺序。
  2. 指数运算符(如乘方)具有较高优先级。
  3. 乘法和除法具有比加法和减法更高的优先级,但是它们的结合性是从左到右。
  4. 加法和减法具有最低优先级,也是从左到右结合的。

根据运算符的优先级和结合性规则,可以使用以下步骤计算中缀表达式的结果:

  1. 遍历表达式并将操作数和运算符按照顺序存储。
  2. 根据括号的优先级和结合性规则,进行括号内的计算。
  3. 依次按照运算符的优先级和结合性规则,计算乘法、除法、加法和减法的结果,直到表达式被完全求解为止。

例如,对于中缀表达式 “(3 + 4) * 2” 的求值步骤如下:

  1. 首先,计算括号内的表达式 “3 + 4”,结果为 7。
  2. 将括号内的结果 7 与乘法运算符和操作数 2 组合,计算结果为 14。

因此,“(3 + 4) * 2” 的中缀表达式的求值结果为 14。

  中缀表达式是人们最常用的数学表达式形式,易于理解和书写。然而,在计算机程序中直接求解中缀表达式较为复杂,因为需要处理运算符的优先级和括号。在计算机科学中,常常将中缀表达式转换为前缀表达式或后缀表达式来简化表达式的求值过程。

后缀表达式

  后缀表达式是一种数学表达式的表示方法,也被称为逆波兰表达式(Reverse Polish Notation)。在后缀表达式中,操作符位于操作数之后。

  后缀表达式的形式是:操作数1 + 操作数2 + 操作符 + …

  例如,“3 4 +” 表示将加法运算符 “+” 应用于操作数 3 和 4。后缀表达式的求值方式是从左到右迭代表达式,并使用栈来计算结果。

具体求值的过程如下:

  1. 从左到右读取表达式,首先遇到的是数字 3,将其压入栈中。
  2. 继续向右读取,下一个是数字 4,将其压入栈中。
  3. 继续向右读取,下一个是运算符 “+”。
  4. 弹出栈顶的两个操作数(4 和 3),执行加法运算得到结果 7。
  5. 将结果 7 压入栈中。 最终栈中只有一个元素,即计算结果 7。

因此,“3 4 +” 的后缀表达式的求值结果为 7。

  后缀表达式的优点是它没有括号,并且运算符的优先级是明确的。由于运算符紧跟在操作数之后,不需要考虑运算符优先级和括号,因此求值过程更简单。可以使用栈数据结构来实现后缀表达式的求值,通过从左到右迭代表达式,遇到操作数就压入栈中,遇到运算符就弹出栈顶的操作数进行计算,并将结果压入栈中,直到整个表达式被求解为止。

  后缀表达式在计算机科学中有广泛的应用,特别是在编译器设计、计算器实现和栈的应用中。它可以方便地用于计算复杂的算术表达式,并且可以通过简单的迭代和栈操作来实现。可以将中缀表达式转换为后缀表达式,使其更适合计算机程序中的求值过程。

中缀表达式转后缀表达式

前缀表达式、中缀表达式、后缀表达式_第2张图片
前缀表达式、中缀表达式、后缀表达式_第3张图片

总结

三种表达式(前缀表达式、中缀表达式和后缀表达式)是描述数学表达式的不同表示方式:

前缀表达式(Prefix Expression):

  1. 运算符位于操作数之前。
  2. 也称为波兰表达式(Polish Notation)。
  3. 求值方式是从右到左递归求值。
  4. 优点是没有括号,运算符优先级明确。
  5. 可以通过递归或栈来求值。

中缀表达式(Infix Expression):

  1. 运算符位于操作数之间。
  2. 是人们通常使用的数学表达式形式。
  3. 求值顺序由运算符的优先级和括号确定。
  4. 需要考虑运算符优先级和结合性规则。
  5. 可以通过括号来明确运算顺序。

后缀表达式(Postfix Expression):

  1. 运算符位于操作数之后。
  2. 也称为逆波兰表达式(Reverse Polish Notation)。
  3. 求值方式是从左到右迭代求值,使用栈来计算结果。
  4. 无需考虑运算符优先级和括号,求值过程较简单。
  5. 可以使用栈数据结构来求值。

总结:

  1. 前缀、中缀和后缀表达式都是数学表达式的不同表示方式。
  2. 前缀表达式的运算符位于操作数之前,求值顺序是从右到左递归求值。
  3. 中缀表达式是常见的数学表达式形式,运算符位于操作数之间,求值顺序由运算符优先级和括号决定.
  4. 后缀表达式的运算符位于操作数之后,求值顺序是从左到右迭代求值,使用栈来计算结果。
  5. 后缀表达式相对于前缀和中缀表达式,在计算机程序中求值更方便,无需考虑运算符优先级和括号。
  6. 转换不同的表达式形式可以简化表达式的求值过程,根据实际需要选择适合的表达式形式进行计算。

你可能感兴趣的:(java,数据结构,算法,数学表达式)