在计算后缀表达式的过程中,你可以根据需要调用以上操作。因为表达式的计算结果可能是浮点数,所以这里将栈的数据元素类型设置为了double类型。
typedef double T; // 数据元素类型
此外,为了计算后缀表达式,我们定义了如下函数,这个函数需要你来实现:
double ComputePostfix(char* s);
/*
s是后缀表达式符号串,如果表达式是7 8 +,那么s[0]=’7’,s[1]=’8’,s[2]=’+’。
该函数返回表达式计算结果。
*/
为了简化你的实现,假设表达式中的操作数都是一个非负的个位数。后面的测试中,输入数据将符合这一要求。
#include
#include
#include "LnkStack.h"
#include "Postfix.h"
double ComputePostfix(char* s)
{
LinkStack* sd=LS_Create();
int i=0;
T k,top1,top2;
while(s[i])
{
switch (s[i])
{
case '+':
LS_Pop(sd,top1);
LS_Pop(sd,top2);
k=top1+top2;
LS_Push(sd,k);
break;
case '-':
LS_Pop(sd,top1);
LS_Pop(sd,top2);
k=top2-top1;
LS_Push(sd,k);
break;
case '*':
LS_Pop(sd,top1);
LS_Pop(sd,top2);
k=top1*top2;
LS_Push(sd,k);
break;
case '/':
LS_Pop(sd,top1);
LS_Pop(sd,top2);
k=top2/top1;
LS_Push(sd,k);
break;
default:
LS_Push(sd, (int)(s[i]-48));
}
i++;
}
T res;
LS_Top(sd,res);
LS_Free(sd);
return res;
}