算术表达式通常有三种表示形式:中缀表达式、前缀表达式(波兰式)和后缀表达式(逆波兰式)。分别都是什么?

1. 中缀表达式(Infix Notation)

  • 形式:运算符位于两个操作数中间,如 A + B
  • 特点
    • 直观:符合人类日常书写习惯,易于阅读。
    • 需要括号和优先级:依赖运算符优先级(如乘除高于加减)和括号来明确运算顺序。
    • 计算复杂:计算机需借助栈或递归下降解析器处理优先级和括号。

示例

  • 3 + 4
  • (5 - 2) * 7
  • A + B * C

2. 前缀表达式(Prefix Notation,波兰式)

  • 形式:运算符位于操作数之前,如 + A B
  • 特点
    • 无需括号:运算顺序由运算符位置决定。
    • 从右向左扫描:计算时需从右向左解析表达式。
    • 计算机友好:可通过栈高效计算,常用于编译器或Lisp类语言。

示例

  • + 3 4 → 等价于 3 + 4
  • * - 5 2 7 → 等价于 (5 - 2) * 7
  • + A * B C → 等价于 A + (B * C)

3. 后缀表达式(Postfix Notation,逆波兰式)

  • 形式:运算符位于操作数之后,如 A B +
  • 特点
    • 无需括号和优先级:运算顺序由运算符位置唯一确定。
    • 从左向右扫描:计算时按顺序处理,遇到运算符立即执行。
    • 高效计算:栈的天然适配(操作数入栈,遇到运算符弹出计算)。

示例

  • 3 4 + → 等价于 3 + 4
  • 5 2 - 7 * → 等价于 (5 - 2) * 7
  • A B C * + → 等价于 A + (B * C)

对比与转换

形式 示例 转换规则
中缀 → 前缀 A + B * C+ A * B C 从右向左扫描,按优先级插入运算符(需调车场算法或递归法)。
中缀 → 后缀 A + B * CA B C * + 从左向右扫描,利用栈处理优先级和括号(经典调车场算法)。

命名来源

  • 前缀表达式:由波兰数学家扬·卢卡西维茨(Jan Łukasiewicz)提出,故称“波兰式”。
  • 后缀表达式:为前缀的逆形式,得名“逆波兰式”。

应用场景

  • 中缀表达式:人类可读的数学表达、编程语言中的公式。
  • 前缀/后缀表达式:编译器中间代码、计算器解析(如逆波兰式计算器)、函数式编程。

你可能感兴趣的:(软考-软件设计师,java,开发语言)