发现以前给的链接搞错了,尴尬
X = (56 - 20)*(4 - 3)/(4+2) ;
那么计算机该怎么算呢?我们给出的方案是先转化为中缀表达式(参考学过的离散),也就是X = 56#20#-4#3#-*4#2#+/ (用#表示一个数据的结束,便于记录)
那接下来怎么办呢?对于后缀表达式的处理我们也可以利用栈来进行,把数据放入栈中,每当遇到一个运算符时,便出栈并处理一组数据,同时把这组数据的结果再次存入栈中,直到表达式处理结束,我么也就可以得到最后的结果。
// 我为什么要说也,我好像不记得了。。。。。。
那么问题来了,如何由中缀表达式转换为后缀表达式?
先上代码(PS:书上也有解法与本解法不同(本质一样),可自行参考)
1 template <class ElemType> 2 void Trans(char * exp, int n, char * postexp) { // 中缀转后缀 3 char e; 4 SqStack <char> * Optr; // 定义运算符栈指针 5 InitStack(Optr, n); // 初始化运算符栈 6 int i = 0; 7 while (*exp != '