【算法】栈实现后缀表达式求值

 

算法思想:

遍历整个表达式
如果是操作数,入栈;
如果是操作符,将当前栈顶元素和栈第二个元素出栈进行运算,并将结果压栈;若是除(减)操作符,第二个元素作为被除数(被减数),栈顶元素作为除数(减数);
表达式遍历完后,当前栈的栈顶元素即为所求表达式的值。

 

代码如下:

// ps:本示例代码只对10以内的整数有效
#include "stdafx.h"
#include<iostream>
using namespace std;
double val(double a, char op, double b)
{
switch (op)
{
case '+': return a + b;
case '-':return a - b;
case '*':return a*b;
case'/':
if (b == 0)
{
cout << "ERROR" << endl;
return 0;
}
else
return a / b;
default:
cout << "ERROR" << endl;
return 0;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
double Stack[10];
int top = -1;

char tt[] = { '4','5', '*', '9','+','3','4','2','/','8','6','*','-','+','/' };
for (int i = 0; i < sizeof(tt) / sizeof(char); ++i)
{
if (tt[i] != '+' && tt[i] != '-' && tt[i] != '*' && tt[i] != '/')
Stack[++top] = tt[i]- '0';//如果是操作数,入栈, tt[i]-'0'将字符转换为整型(只对10以内的整数有效)
else
{
int b = Stack[top--];//取出当前栈顶元素
int a = Stack[top--];//取出当前栈第二个元素
Stack[++top] = val(a, tt[i], b);//进行运算,并将运算结果压栈
//cout << a << tt[i]<< b << '=' << Stack[top] << endl;
}
}


cout << Stack[top--]<<endl;//打印最后结果

return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章