三、栈(stack)

栈的特点是先进后出

3.1 通过栈实现的前缀,中缀,后缀表达式的计算

前缀表达式: 前缀表达式叫做波兰表达式,例如(3+2)3+4 => ++3234 符号在前所以叫前缀表达式

计算方法:从右往左遍历前缀表达式,遇到数字压入栈中,遇到符号从栈中弹出两个数将其计算后将结果压入栈中,重复操作,直到栈中只剩下最后一个数即为结果

中缀表达式: 中缀表达式就是我们人最好接受的形式:例如(3+2)*4,对于中缀表达式的计算虽然人好接受但是计算机并不容易接受,所以对于中缀表达式的计算通常转换为后缀表达式进行计算。

中缀表达式转换为后缀表达式 :

  1. 首先创建两个栈,一个符号栈operStack,一个数字栈numStack,这里的数字栈可以用一个list代替,便于后面的逆序输出,因为数字栈在这里面不做任何的pop运算,所以可以用list代替

  2. 然后遍历整个中缀表达式,遍历需要遵循如下规则

    1. 如果读取到的为字符

      • 符号栈operStack为空,直接将字符push进去

      • 符号栈operStack不为空,判断读取的字符和栈顶的字符优先级(括号不是字符不用管优先级),如果读取的字符优先级大于栈顶字符则直接压入,反之则将栈顶符号弹出并压入numStack中,再次判断读取的字符和栈顶字符,重复操作,直到读取字符优先级大于栈顶字符或栈为空将读取的字符压入operStack

      • 读取到的为左括号( 直接放进operStack

      • 读取到的为右括号 ) 一次将operStack的符号弹出压入numSatck中,直到遇到左括号为止,然后将这一对括号丢弃

    2. 如果读取的为数字

      • 直接压入numStack中

  3. 遍历完后依次将operStack中的字符一次弹出压入numStack中

  4. numStack顺序弹出结果的逆序即为后缀表示

后缀表达式: 后缀表达式也叫 逆波兰表达式 例如 :(3+2)* 3+4 => 32+3*4+ 符号在后所以叫后缀表达式

后缀表达式的计算:

  • 左往右遍历后缀表达式,遇到数字直接压入栈,遇到符号直接弹出两个数进行计算然后再次将结果压入栈中,直到最后栈中结果只剩一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值