讲解后缀表达式

来源:互联网 发布:友盟推送 php服务器端 编辑:程序博客网 时间:2024/06/18 18:25

前文:  

           当我们练习敲代码,以及写程序的时候,我们对于 printf("%d",3+4*5); 的结果从来都不会感到疑问。因为当这样的式子出现,我们会理所当然的想到先乘后加,所以得到我们的结果,但是计算机存放局部变量在栈中,栈的特性先进后出那么我们就知道+号是比*先进入,那么计算机为何在*号没进来时对3和4进行加法运算呢?下面我将讲解这个问题。

正文:

       我们来看一道题:X=A+B*(C-D)/E  他在计算机中是如何放如何解答。   
 我们知道先进行运算的是C和D之间的减法然后是(C-D)和B的乘法 B*(C-D)和E的除法最后是A和B*(C-D)/E的加法。根据栈的特性加上前面所说。C,D,-,会在栈中连着存放。当栈放入运算符时,他们被取出运算后又会放入栈然后进行下一步,所以我们知道B和*在C,D,-连着存放(C,D,-是一个整体B,*不可插在其中间),那么依次类推 :E和/在B,*,C,D,-连着存放。。。。。。。后面同理。

然后用后缀表达式表示就是:XABCD-*/E+=    

还有一种更快的方式来得到后缀表达式:计算机和人脑不一样的就是他记忆性很差,很笨,不知道运算的优先级,那么我们只需要人为的取消掉运算的优先级即可。取消优先级我们可以加括号。
最后式子就会变成    : ( X=(A+((B*(C-D) ) /E) ) )      然后把每个括号中的运算符放到他们想应括号的右边  
最后就是           ( X(A((B(CD) -)*E)/ )+ )=   然后去掉所有括号   就是XABCD-*E/+=   

原创粉丝点击