将中缀转换为后缀并求值

一.中缀转后缀

中缀转后缀口诀:

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出栈,栈变为空。

 

 
 

 

posted @ 2014-10-16 21:00  GKL2013  阅读(421)  评论(0编辑  收藏  举报
NEW BLOG TOP