表达式求值
逆波兰表达式是一种后缀表达式,所谓后缀就是指运算符写在运算数的后面。平常使用的算式则是一种中缀表达式,如 ,该算式的逆波兰表达式写法为 。
逆波兰表达式的优点在于去掉了中缀表达式中的括号后表达式无歧义,因此适合用栈操作运算。遇到数字则入栈,遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。
互动实验
后缀表达式控制台
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
C
double calculate(char *expression) {
double_stack_t *stack = double_stack_create();
char *token = strtok(expression, " ");
while (token != NULL) {
if (strchr("+-*/", token[0]) && token[1] == '\0') {
double right = double_stack_pop(stack);
double left = double_stack_pop(stack);
double_stack_push(stack, apply(left, token[0], right));
} else {
double_stack_push(stack, atof(token));
}
token = strtok(NULL, " ");
}
return double_stack_pop(stack);
}