码迷,mamicode.com
首页 > 其他好文 > 详细

经典白话算法之中缀表达式和后缀表达式

时间:2014-05-03 16:59:21      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:剑指offer   校园招聘   算法   面试   

一、后缀表达式求值

后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。

假定待求值的后缀表达式为:6  5  2  3  + 8 * + 3  +  *,则其求值过程如下:


(1)遍历表达式,遇到的数字首先放入栈中,依次读入6 5 2 3 此时栈如下所示:

bubuko.com,布布扣

(2)接着读到“+”,则从栈中弹出3和2,执行3+2,计算结果等于5,并将5压入到栈中。

bubuko.com,布布扣

(3)然后读到8(数字入栈),将其直接放入栈中。

bubuko.com,布布扣

(4)读到“*”,弹出8和5,执行8*5,并将结果40压入栈中。

而后过程类似,读到“+”,将40和5弹出,将40+5的结果45压入栈...以此类推。最后求的值288。


代码:

  1. #include<iostream>  
  2. #include<stack>  
  3. #include<stdio.h>  
  4. #include<string.h>  
  5. using namespace std;  
  6.   
  7. int main(){  
  8.     string PostArray;  
  9.     int len,i,a,b;  
  10.     while(cin>>PostArray){  
  11.         stack<int> Stack;  
  12.         len = PostArray.length();  
  13.         for(i = 0;i < len;i++){  
  14.             //跳过空格  
  15.             if(PostArray[i] == ‘ ‘){  
  16.                 continue;  
  17.             }  
  18.             //如果是数字则入栈  
  19.             if(PostArray[i] >= ‘0‘ && PostArray[i] <= ‘9‘){  
  20.                 Stack.push(PostArray[i] - ‘0‘);  
  21.             }  
  22.             //如果是字符则从栈读出两个数进行运算  
  23.             else{  
  24.                 //算数a出栈  
  25.                 a = Stack.top();  
  26.                 Stack.pop();  
  27.                 //算法b出栈  
  28.                 b = Stack.top();  
  29.                 Stack.pop();  
  30.                 //进行运算(+ - * /)  
  31.                 if(PostArray[i] == ‘+‘){  
  32.                     Stack.push(a + b);  
  33.                 }  
  34.                 else if(PostArray[i] == ‘-‘){  
  35.                     Stack.push(a - b);  
  36.                 }  
  37.                 else if(PostArray[i] == ‘*‘){  
  38.                     Stack.push(a * b);  
  39.                 }  
  40.                 else if(PostArray[i] == ‘/‘){  
  41.                     Stack.push(a / b);  
  42.                 }  
  43.             }  
  44.         }//for  
  45.         printf("%d\n",Stack.top());  
  46.     }//while  
  47.     return 0;  
  48. }  

经典白话算法之中缀表达式和后缀表达式,布布扣,bubuko.com

经典白话算法之中缀表达式和后缀表达式

标签:剑指offer   校园招聘   算法   面试   

原文地址:http://blog.csdn.net/sunnyyoona/article/details/24903763

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!