写在前面
在数据结构中,栈是非常重要的储存结构,比如栈应用于求表达式,将输入的等式进行转换,如前缀表达式、后缀表达式等然后进行求值并返回结果。
但是本文并为使用栈实现后缀表达式求值,而是通过一般函数方法,需要先计算一下,将原式转换成后缀表达式后再输入求值哦,试试看。
代码实现
#include <stdio.h>
#include <stdlib.h>
void evalPf(char*);
double cal(double, char, double);
int main(){
char input[80];
printf("请输入后缀式:\n\n");
printf("例如:\n算式 (1+2)*(3+4) 的后缀式为:12+34+* \n\n");
scanf("%s", input);
evalPf(input);
return 0;
}
void evalPf(char* postfix){
double stack[80] = {0.0};
char temp[2];
char token;
int top = 0, i = 0;
temp[1] = '\0';
while(1){
token = postfix[i];
switch(token){
case '\0':
printf("原式 = %f\n", stack[top]);
return;
case '+':
case '-':
case '*':
case '/':
stack[top-1] =cal(stack[top], token, stack[top-1]);
top--;
break;
default:
if(top < sizeof(stack) / sizeof(float)){
temp[0] = postfix[i];
top++;
stack[top] = atof(temp);
}
break;
}
i++;
}
}
double cal(double p1, char op, double p2){
switch(op){
case '+':
return p1 + p2;
case '-':
return p1 - p2;
case '*':
return p1 * p2;
case '/':
return p1 / p2;
}
}
运行结果