逆波兰表达式的一点感想

关于逆波兰表达式的一些想法

​ 谈起逆波兰式最好说一说波兰式,这两个都是为了纪念一位波兰数学家而得名。这位波兰数学家在很久以前它的著作中谈到:他发现了一种可以不使用括号的表达方法。

  • 平时我们习惯将表达式写成 (1+2)*(3+4) ,加减乘除等运算符写在符号中间,因此称呼为中缀表达式
  • 而波兰表达式的写法为 (*(+ 1 2)(+ 3 4)) ,将运算符写在前面,因此称为前缀表达式。
  • 逆波兰表达式就是这种 ((1 2 +)(3 4 +)*),将运算符写在后面,所以逆波兰表达式也叫做后缀表达式。

使用波兰表达式和逆波兰表达式有个好处,就是前面提到的可以去掉括号,并且不引起歧义,而且不用考虑优先级。这一点极大的方便了栈式语言。比如

1+1*1 可以转换为 1 1 1 * +

(1+1)*1 可以转换为 1 1 + 1 *

通常我们看到的表达式只是人能够看得懂的表达式,比如1+1*1 ,而计算机看得懂的是这种表达式处理过后数据单元 1 1 + ,这种东西也叫做Tokenize,通常表达式还要经过parser处理。计算机处理表达式还是把他们当做字符串来处理,并且还是从左到右处理。

逆波兰表表达式操作步骤

  • 读取中缀表达式,遇到操作数直接输出。
  • 遇到操作符一次从栈中弹出优先级更高的操作符,同时输出括号外的操作符。
  • 读取完毕,一次输出栈中的所有字符

计算机将中缀表达式转化成逆波兰表达式就是逆波兰表达式最为重要的应用之一。

——————————————————————————-————

CS的东西妙是真的妙,就是容易头秃。还是CS:GO有意思

posted @ 2020-05-06 17:53  _Sandman  阅读(431)  评论(0编辑  收藏  举报