用栈演示表达式4*6^(3+3*3-2*3)-8 的求值过程
-
用栈实现算术表达式的运算,需要两个栈:一个用于保存操作数,一个用于保存操作码(运算符)。
当一直扫描到第一个减号(-)时,两个栈都是在进行入栈操作。
因 -(减法)运算符优先级低于optStack栈顶的运算符。这时从optStack栈中弹出,再从numStack中弹出3和3 两个操作数,进行乘法运算33=9,并把结果压入numStack栈中。
计算完成后,因-(减法)和+(加法)的优先级相同,栈内优先。此时,把+从optStack栈中弹出,并从numStack中相继弹出9和3,计算3+9=12,并把结果压入numStack栈中。
因-(减法)优先级大于栈中(的优先级,-入栈。
继续扫描,直到遇到右括号。
因右括号的优先级最低,或者说表示子表达式到此结束,此时从optStack栈中依次弹出运算符,从numStack中相应弹出 2 个操作数,计算后把结果压入numStack中,直到在optStack栈中遇到左括号。
弹出对3和2进行计算。并把结果6压入numStack中。
弹出-运算符,并对numStack栈中的12和6进行计算。
(出栈,表示由括号表示的子表达式计算结束。继续扫描到第二个-
因-优先级小于^,先做6^6=46656乘方运算 。
-优先级小于*,继续做乘法运算,46656*4=186624。
-入栈,最后一个数字 8入栈。
因整个表达式结束,弹出-,做最后的减法运算186624-8=186616。整个表达式结束,numStack栈顶的结果为表达式的最后结果。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏