二,中缀表达式和后缀表达式

前言

什么是中缀表达式?中缀表达式就是我们通常在初等数学中学习的一些加减乘除的四则运算,例如(3+5)*8等运算。这样的运算符合人的思维逻辑,先乘除后加减的运算法则。但是在计算机中不是这么排列的,计算机中是使用的是后缀表达式,对于刚刚的中缀表达式的后缀表达式应该是35+8*,至于如何将中缀表达式转化成后缀表达式,下面将会说到。

中缀表达式到后缀表示的转化

栈这样的数据结构,在计算机中应该是经常遇见的。这是一种先进后出的数据结构,一个数据元素的加入叫做入栈,一个数据元素的删除叫做出栈。在Java中栈的数据结构是使用Stack来表示的。对于入栈顺序为ABCDEF的数据元素,出栈的顺序可能就是FEDCBA,当然这样的出栈顺序可能不是唯一的,因为在一个元素的入栈之后可能立马就会出栈,而不会等到所有的数据都入栈了,栈顶的元素才开始出栈。
这里写图片描述
这边说到栈数据结构,是因为在中缀表达式到后缀表达式的转化需要用到栈的数据结构。例如对于中缀表达式9+(5 - 3) * 4 + 8 / 4的转化应该是将数据元素出栈,遇到左右括号闭合出栈,栈顶元素优先级低于栈底元素应该出栈,所以详细的转化过程应该如下:

  1. 数据元素直接出栈
    这里写图片描述
    所以当前的后缀表达式应该是953
  2. 遇到闭合括号出栈
    这里写图片描述
  3. 加号的优先级低于乘号
    这里写图片描述
  4. 弹出在栈中的所有操作符
    这里写图片描述
    所以最后的后缀表达式应该是953-4*+84/+

猜你喜欢

转载自blog.csdn.net/u010871004/article/details/81276568