数据结构day02 堆栈

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 /

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值