03 利用栈进行中缀表达式计算

文章讲述了在计算中缀表达式时如何使用两个栈处理运算符优先级,以及中缀表达式转换为后缀表达式的概念。重点在于理解运算符栈和数字栈的作用,以及如何根据优先级进行运算符的处理。以A+B×(C-D)-E/F为例,详细解析了计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运算符优先级

​​​​请添加图片描述
栈内运算符加减乘除取模优先级比栈外优先级大1,例如当2+3-5时我们往往从左到右计算,即先算+再算-,使用中缀表达式两个栈计算就是栈外-优先级低于栈顶+,故会弹出+运算符和两个操作数进行计算。

中缀表达式计算(需要两个栈)

  • 需要使用两个栈,一个数字栈,用来存数字,另一个是运算符栈,用于存运算符
  • 数字栈出栈:只有运算符栈中右运算符出栈时,数字才会弹出两个操作数
  • 运算符栈出栈:比较新运算符与栈顶运算符优先级高低,当新运算符优先级高于站顶运算符时,新运算符入栈。当新运算符优先级低于栈顶元素时,栈顶运算符出栈(数字栈弹出两个操作数,计算结果入数字栈),然后再和新的栈顶元素进行比较,直到优先级高于栈顶元素或优先级相等(即栈内左括号,栈外右括号)
  • 计算:当数字栈弹出两个操作数,运算符栈出栈运算符时计算,计算结果重新入数字栈

以A+B×(C-D)-E/F为例

  1. 一开始数字栈和符为空,数字栈进了A和B,符号栈进了+
  2. ×运算符优先级高于+,进栈
  3. ( 优先级在入栈前是最高的(入栈后优先级变为最低),当然高于×,进栈
  4. - 优先级高于站内( ,入栈,D入栈
  5. 栈外 ) 优先级低于 - ,- 出栈,计算C-D设为r1,让r1入栈,继续比较,栈外)优先级等于栈内(,把( 扔掉,出栈结束
  6. 后续步骤如图:
    在这里插入图片描述

后缀表达式计算(需要一个栈)

中缀表达式转后缀表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值