zoukankan      html  css  js  c++  java
  • 四则运算使用栈和后缀表达式

    我们在一般的四则运算都是中缀表达式。

    别问我什么是中缀表达式。

    我就知道符号两边是数字。也就是符号在中间。

    1+3

    什么是后缀表达式呢?

    13+

    符号在后面。

    那么就有人奇怪了,为什么我要使用后缀表达式呢?

    问题就是运算的时候,在编程实现的时候,后缀表达式比中缀表达式好用呗。

    没事,不理解那里好用没事,我们先把中缀表达式转换成后缀表达式然后实际看看就知道了。

    从左到右依次读取

    运算数,输出

    左括号,入栈

    右括号,将栈顶的运算符并输出,直到遇到左括号

    运算符

    {

    若优先级大于栈顶运算符,入栈

    若优先级小于栈顶运算符,栈顶运算符出站并输出,再比较新的栈顶运算符,直到运算符大于栈顶运算符为止,然后这个运算符入栈

    }

    最后把栈全部输出

    2+3*(2+3)-1

    出2

    出2栈+

    出23栈+

    出23栈+*

    出23栈+*(

    出232栈+*(

    出232栈+*(+

    出2323栈+*(+

    出2323+*+栈-

    出2323+*+1栈-

    出2323+*+1-栈

    然后利用栈来计算这个式子

    栈2323

    遇到+了

    出来两个数,结果进去

    栈235

    遇到*了

    出来两个,结果进去

    2 15

    遇到+了

    出来两个数,结果进去

    17

    遇到1了进去

    17 1

    遇到-了

    出来两个数,结果进去

    16

    就算遇到了很难的,很复杂的式子,只要利用后缀表达式就很容易了。

    主要还是利用栈的特性,合理的使用数据结构是很重要的。

  • 相关阅读:
    mysql:基础管理、体系结构、升级降级
    Linux网络基础
    mysql 忘记本地密码
    seq命令的用法
    mysql03-SQL应用
    SolidWorks 如何改变封闭草图的背景颜色
    新版 AD 无法选中某些部件(如 Via,Pad)的问题
    安装 dot net 时出现严重错误 0x80070643 安装时发生严重错误 1603 ndp48
    IO 口扩展
    自动波特率检测
  • 原文地址:https://www.cnblogs.com/linkstar/p/5656727.html
Copyright © 2011-2022 走看看