zoukankan      html  css  js  c++  java
  • 将中缀转换为后缀并求值

    一.中缀转后缀

    中缀转后缀口诀:

    1.遇到操作数,直接输出。

    2.当栈为空时,遇到操作符直接入栈。

    3.遇到左括号,将其入栈

    4.遇到右括号,执行出栈,输出出栈的元素,直到弹出左括号,(左右括号不输出)。

    5.遇到运算符时,依次弹出所有优先级大于或等于该运算符的栈顶元素(到输出)然后将该元素入栈,否则直接入栈。

    6.最终栈顶元素依次输出。   

            中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+”

       

    下面我们来具体看看这个过程。

    1. 初始化一空栈,用来对符号进出栈使用。

    2. 第一个字符是数字9,输出9,后面是符号“+”,进

    3. 第三个字符是“(”,依然是符号,因其只是左括号,还未配对,故进栈。

    4. 第四个字符是数字3,输出,总表达式为9 3,接着是“-”进栈。

    5. 接下来是数字1,输出,总表达式为9 3 1,后面是符号“)”,此时,我们需要去匹配此前的“(”,所以栈顶依次出栈,并输出,直到“(”出栈为止。此时左括号上方只有“-”,因此输出“-”,总的输出表达式为9 3 1 -

    6. 接着是数字3,输出,总的表达式为9 3 1 - 3 。紧接着是符号“*”,因为此时的栈顶符号为“+”号,优先级低于“*”,因此不输出,进栈。

    7. 之后是符号“+”,此时当前栈顶元素比这个“+”的优先级高,因此栈中元素出栈并输出(没有比“+”号更低的优先级,所以全部出栈),总输出表达式为 9 3 1 - 3 * +.然后将当前这个符号“+”进栈。也就是说,前6张图的栈底的“+”是指中缀表达式中开头的9后面那个“+”,而下图中的栈底(也是栈顶)的“+”是指 “9+(3-1)*3+”中的最后一个“+”。

    8. 紧接着数字10,输出,总表达式变为9 3 1-3 * + 10。

    9. 最后一个数字2,输出,总的表达式为 9 3 1-3*+ 10 2

    10. 因已经到最后,所以将栈中符号全部出栈并输出。最终输出的后缀表达式结果为 9 3 1-3*+ 10 2/+

     
     

    二,计算后缀表达式

    计算后缀表达式口诀:

    1.遇到操作数直接入栈。

    2.遇到操作符弹出栈顶两个元素,运算其结果并入栈。

     

      后缀表达式:9 3 1-3*+ 10 2/+

     

    下面是详细的步骤:

     

    1. 初始化一个空。此桟用来对要运算的数字进出使用。

     

    2. 后缀表达式中前三个都是数字,所以9、3、1进栈。

     

     

    3. 接下来是减号“-”,所以将栈中的1出栈作为减数,3出栈作为被减数,并运算3-1得到2,再将2进栈。

     

    4. 接着是数字3进栈。

     

     

    5. 后面是乘法“*”,也就意味着栈中3和2出栈,2与3相乘,得到6,并将6进栈。

     

    6. 下面是加法“+”,所以找中6和9出找,9与6相加,得到15,将15进栈。

     

     

    7. 接着是10与2两数字进栈。

     

    8. 接下来是符号因此,栈顶的2与10出栈,10与2相除,得到5,将5进栈。

     

     

    9. 最后一个是符号“+”,所以15与5出找并相加,得到20,将20进栈。

     

    10. 结果是20出栈,栈变为空。

     

     
     

     

  • 相关阅读:
    读《大道至简》第二章有感
    读大道至简之感
    C#学习笔记二:并行编程基础:在 PLINQ 和 TPL 中的 Lambda 表达式
    C#学习笔记一:委托、匿名函数、Lambda 表达式
    VS2013 最常用 和 不是最常用的快捷键备忘
    EntityFramework初上手
    C#的值类型,引用类型,栈,堆,ref,out
    python批量下载图片
    django部署for新浪SAE
    Linux下安装搜狗拼音输入法
  • 原文地址:https://www.cnblogs.com/gkl2013/p/4024610.html
Copyright © 2011-2022 走看看