在学习数据结构和算法时,我们常常会接触到表达式的不同写法,它们分别是中缀表达式、前缀表达式和后缀表达式。我们日常最熟悉的表达形式就是中缀表达式,如下所示:
5-4\*3/(2+1)
中缀表达式最符合人类的书写和阅读习惯,但对于计算机来说,它却并不友好。于是,为了更高效地进行计算,我们引入了前缀和后缀表达式的表示方式。
中缀表达式是我们平时学习和使用的表达方式,它的特点是:运算符位于两个操作数之间,并且可以通过括号来调整运算优先级。
虽然中缀表达式易于阅读,但它存在如下问题:
中缀表达式的计算(借助两个栈)
为了让计算机也能处理中缀表达式,我们可以借助两个栈:
栈1(操作数栈):用于保存操作数;
栈2(运算符栈 :用于保存运算符。
基本步骤如下:
如果栈2为空,或当前运算符优先级大于栈顶运算符,入栈;
否则弹出栈2顶端运算符,同时从栈1中弹出两个操作数进行运算,将结果压入栈1,然后继续比较;
最终栈1中的元素即为表达式的计算结果。
流程如下:
前缀表达式又称波兰表达式,其特点是:运算符写在两个操作数的前面,如下所示:
-5\*4/3+12
该前缀表达式所对应的中缀表达式是
5-4\*3/(2+1)
前缀表达式的优势在于,完全不依赖括号或运算符优先级来确定运算顺序。按照从右往左的顺序遍历,先遇到的运算符先进行运算。
前缀表达式的计算方式(借助栈):
后缀表达式也叫逆波兰表达式,其特点是:运算符写在两个操作数之后,比如:
54321+/\*-
该后缀表达式所对应的中缀表达式同样是
5-4\*3/(2+1)
后缀表达式的优势
后缀表达式的计算方式:
流程图如下:
最后栈中剩下的值就是最终的计算结果。
从计算机处理的角度来看,前缀和后缀表达式具有更明确的结构和更线性的执行流程,只需借助一个栈即可完成整个表达式的计算过程。而在实际应用中,由于后缀表达式的运算更加直观简洁,因此它被更广泛地用于计算机内部的表达式求值中。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有