【算法】棧實現後綴表達式求值

 

算法思想:

遍歷整個表達式
如果是操作數,入棧;
如果是操作符,將當前棧頂元素和棧第二個元素出棧進行運算,並將結果壓棧;若是除(減)操作符,第二個元素作爲被除數(被減數),棧頂元素作爲除數(減數);
表達式遍歷完後,當前棧的棧頂元素即爲所求表達式的值。

 

代碼如下:

// 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;
}

 

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