1.堆栈是什么
堆栈有点像小时候存硬币用的带弹簧的小东西,一枚一枚硬币往里压,但是最后放入的肯定是最先用到的.并且不论放多少枚硬币,最先取出来的都是最上面的那一枚(top).
四个字总结:先入后出.
2.中缀表达式转化为后缀表达式
我写的计算方法不一定适合所有人,只是我的理解,如有错误请大家在评论区指正~
在后缀表达式中,遇到运算符号时,运算符号左侧(下面)的第一个数是运算数(加数、减数、除数、乘数等等),例如a + b转化成后缀表达式就是a b +,a是被运算数,b是运算数,对这两个数进行了加法运算,所以加号+放在被运算数右侧(上面).
其实就是运算符号和运算数颠倒一下顺序.
输入操作数后直接输出操作数,输入运算符号后先入栈(push),等待判断运算顺序.
例子:a *( b + c) / d 转换为后缀表达式
input: a
output: a
input & push: *
input & push: ( //遇到左括号,此时括号内的运算优先级一定大于a后面的 *
input: b
output: b //此时输出区有a、b两个元素
input & push: + //此时堆栈内有三个运算符号: *、(、+,但目前不能确定运算顺序
input: c
output: c //不能确定运算顺序,因为c后可能是乘除,也可能是另一个左括号
input & push: ) //此时可以确定运算优先级了,一定是先算 b + c,然后用a 乘这个和
pop & output: + //最上层(top)的加号+先出栈
pop & output: * // b和c是加法运算,运算结束后遇到乘号*
input & push: / //不能确定运算顺序,因为除号/后有可能是左括号
input : d /*此时可以确定运算顺序了,因为d是最后一个元素.如果d后还有元素,依旧不能
确定(例如指数)*/
output :d
pop & output: /
所以最终输出为: a b c + * d /