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

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

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

  • 相关阅读:
    angular转场动画
    css常用单位
    css3美化滚动条样式
    grid布局
    angular使用material组件库和tailwindcss样式
    使用 BaGet 搭建 nuget 仓库
    net core api 文件下载,断点续传
    netcore 使用中间件响应文件下载请求
    angular通知组件--angular2-toaster
    angular图标组件--@visurel/iconify-angular
  • 原文地址:https://www.cnblogs.com/linkstar/p/5656727.html
Copyright © 2011-2022 走看看