算术表达式求值

堆栈组织在计算算术表达式时非常有效。表达式通常表示为 中缀符号 ,其中每个运算符都写在两个操作数(即A+B)之间。使用这种表示法,我们必须通过使用括号或某种运算符优先约定来区分(A+B)*C和A+(B*C)。因此,算术表达式中运算符和操作数的顺序并不能唯一地确定执行操作的顺序。

null

1.波兰语符号(前缀符号)—— 它指的是将运算符置于两个操作数之前的表示法。此处不需要括号,即:。,

+AB 

2.反向波兰符号(后缀符号)—— 它指的是一种类似的表示法,其中运算符放在两个操作数之后。同样,反向波兰符号中不需要括号,即。,

AB+ 

与传统的中缀表示法相比,堆栈组织的计算机更适合于后固定表示法。因此,中缀符号必须转换为后缀符号。从中缀符号到后缀符号的转换必须考虑操作层次。

5个二进制运算符有3个优先级,如下所示:

Highest: Exponentiation (^)Next highest: Multiplication (*) and division (/)Lowest: Addition (+) and Subtraction (-) 

例如——

Infix notation: (A-B)*[C/(D+E)+F]Post-fix notation: AB- CDE +/F +* 

这里,我们首先在括号(A-B)和(D+E)内执行算术。C/(D+E)的除法必须在与F相加之前完成。之后,将括号和括号内的两项相乘。

现在我们需要使用堆栈来计算这些算术运算的值。

获得结果的程序是:

  1. 将表达式转换为反向波兰语表示法(post fix表示法)。
  2. 按操作数出现的顺序将其推入堆栈。
  3. 当任何运算符遇到时,弹出两个最上面的操作数以执行该操作。
  4. 执行后,将获得的结果推入堆栈。
  5. 表达式完全执行后,最终结果仍保留在堆栈顶部。

例如——

Infix notation: (2+4) * (4+6)Post-fix notation: 2 4 + 4 6 + *Result: 60 

此表达式计算的堆栈操作如下所示:

图片[1]-算术表达式求值-yiteyi-C++库

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享