• 【无标题】


    中缀表达式是我们平时看到的运算式形式,但是对于计算机来说是非常难以理解的形式,在计算机运算中后缀表达式是更为常见的一种形式,将中缀表达式转换为后缀是我们必须掌握的方法。

    下面是依次扫描的几种基本原则:
    1.如果扫描的是数字,则直接输出;
    2.如果扫描的是'(',则直接入栈,此时'('变为优先级最小的运算符;
    3.如果扫描的是')',则栈顶元素不断出栈,直到将'('出栈(注意:'(',')'符号仅当标记使用,不用打印出后缀表达式中);
    4.如果扫描的是其它运算符,如果栈为空或优先级小于自己,则入栈;否则不断地出栈直到满足要
    求;
     
     



      例子:
    求  (a/(b*c-d))/(e-b)+d 的后缀表达式

    1.扫描到'(',进入符号栈;
    2.'a' 直接输出;
    3.‘/’优先级大于'(',入符号栈;
    4.'('直接入栈;
    5.'b' 直接输出;
    6.'*'优先级大于'(',直接入栈;
    7.'c' 直接输出;
    8.'-'优先级小于栈顶的 '*','*'输出,栈顶变为'(','-'入栈;

    9.‘d’直接输出;

    10.')'入栈,输出栈中的 '-',消除一个'(',栈顶现在变成'/';

    11.‘)’入栈,栈顶'/'输出,并消掉'(',符号栈为空;

    12.'/'入栈;

    13.'('入栈;

    14.‘e’ 直接输出;

    15.'-'优先级大于栈顶的'(',入栈;

    16.‘b’ 直接输出;

    17.')'入栈,栈顶'-'输出,消掉'(',此时栈顶变成'/';

    18.‘+’优先级小于'/','/'输出;

    19.‘d’直接输出;

    20.扫描完毕,将栈中元素依次弹出'+';

    最后得到:abc*d-/eb-/d+ 

  • 相关阅读:
    SpringBoot学习笔记(4)——B站动力节点
    JUC下的常用类
    猿创征文 第二季| #「笔耕不辍」--生命不息,写作不止#
    C++11 智能指针之weak_ptr
    SQL 序列生成器
    Linux sed
    初始化使用花括号还是圆括号?
    深入理解JavaScript:对象什么时候创建
    数据结构-二叉树的递归遍历
    FlinkSQL自定义UDTF使用的四种方式
  • 原文地址:https://blog.csdn.net/weixin_62466612/article/details/127998797