用栈模拟计算器以及中缀转后缀表达式(逆波兰表达式)

后缀表达式(逆波兰表达式)运算方法

  • 从左向右读取表达式

    • 遇到数字就压入栈中
    • 遇到运算符就弹出栈顶和次顶元素。用次顶元素 运算符 栈顶元素,并将运算结果压入栈中,直到栈为空,最终结果就是运算结果

设计

中缀表达式转后缀表达式

  • 从左向右读取中缀表达式,并且创建栈s1队列s2 (因为s2只存不取且还要考虑出栈后逆序的问题,所以这里用队列来代替栈)
  • 如果读到的元素的数字,就直接入队放入s2中
  • 如果读到的是运算符(运算符判定)
    • 如果s1为空,则将该运算符压入s1
    • 如果s1不为空
      • 如果该运算符为左括号,则直接压入s1
      • 如果该运算符为右括号,则将s1中的元素依次出栈并入队到s2中,直到遇见左括号为止(括号不放入s2中)
      • 如果该运算符的优先级高于s1栈顶的运算符,则将该元素压入s1
      • 如果该运算符的优先级小于等于s1栈顶的运算符,则弹出s1栈顶的元素,并将其放入s2中,该运算符重新判定入栈操作(运算符判定步骤)
  • 如果中缀表达式已经读取完毕,则将s1中的元素依次出栈,放入s2中
  • s2中的元素依次出队,该顺序即为后缀表达式

 

 代码

  结果

 

posted @   腹白  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示