关于栈的表达式计算

整体来说分为两步。

  1. 将中缀表达式转换为后缀表达式
  2. 计算后缀表达式

第一步 中缀表达式转化
我们现在有一个中缀表达式字符串S和一个空字符串T作为后缀表达式的空间。当我们开始尝试逐位读取每一位字符时,我们会遇到以下情况:
1. 第一位可能为运算分量或左括号。若为运算分量便将这个运算分量添加到T的末尾(也就是输出);若为左括号,便将左括号压入运算符栈中。
2. 对面后面读取的每一位,可能为运算分量、运算符、左右括号。若为运算分量则添加到T的末尾;若为运算符,如果当前运算符栈为空则压入栈中。如果当前运算符优先级大于等于运算符栈栈顶元素,则将运算符压入运算符栈中。如果当前运算符优先级小于栈顶元素,则将栈顶元素出栈添加到T末尾,然后再将当前运算符添加到T末尾。;若为左括号,压入运算符栈中;若为右括号,则将运算符栈中元素逐个出栈并添加到T的末尾直到最近的左括号出栈(左括号出栈但不加入T);若为NNLL(S读完),则将运算符栈中所有元素出栈并添加到T末尾。
当S读完时,得到的T串就是后缀表达式。
例,对于中缀表达式 :1×7-3×5-4
1-7×3-5×4
1-7×(3-5)×4
得到的后缀表达式分别为:
17×35×-4-
173×-54×-
1735-4××-

第二步 计算后缀表达式
对于中缀表达式T中存在的运算,±×%都是二目运算符,当读到运算分量时将其入栈,当读到运算符时出栈两个运算分量进行运算并将运算结果入栈就行。例如17×35×-4-的运算过程。1、7依次入栈,读到x时,7、1先后出栈并计算 {后出栈元素(运算符)先出栈元素} 1×7,将结果7入栈;读到3、5依次入栈;读到x,将5、3先后出栈 计算3×5,将结果15入栈;读到-,将15、7先后出栈,计算7-15,将结果-8入栈;入到4入栈;读到-,将4、-8先后出栈,计算-8-4,将结果-12入栈。全部读取结束,-12出栈为最后结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值