03 利用栈进行中缀表达式计算
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
运算符优先级
栈内运算符加减乘除取模优先级比栈外优先级大1例如当2+3-5时我们往往从左到右计算即先算+再算-使用中缀表达式两个栈计算就是栈外-优先级低于栈顶+故会弹出+运算符和两个操作数进行计算。
中缀表达式计算需要两个栈
- 需要使用两个栈一个数字栈用来存数字另一个是运算符栈用于存运算符
- 数字栈出栈只有运算符栈中右运算符出栈时数字才会弹出两个操作数
- 运算符栈出栈比较新运算符与栈顶运算符优先级高低当新运算符优先级高于站顶运算符时新运算符入栈。当新运算符优先级低于栈顶元素时栈顶运算符出栈数字栈弹出两个操作数计算结果入数字栈然后再和新的栈顶元素进行比较直到优先级高于栈顶元素或优先级相等即栈内左括号栈外右括号
- 计算当数字栈弹出两个操作数运算符栈出栈运算符时计算计算结果重新入数字栈
以A+B×(C-D)-E/F为例
- 一开始数字栈和符为空数字栈进了A和B符号栈进了+
- ×运算符优先级高于+进栈
- ( 优先级在入栈前是最高的(入栈后优先级变为最低)当然高于×进栈
- - 优先级高于站内( ,入栈D入栈
- 栈外 ) 优先级低于 - - 出栈计算C-D设为r1让r1入栈继续比较栈外优先级等于栈内把 扔掉出栈结束
- 后续步骤如图