C语言对逆波兰表达式求值
时间: 2024-03-16 08:16:06 浏览: 74
可以使用栈来实现逆波兰表达式求值,具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
int stack[MAX_STACK_SIZE];
int top = -1;
void push(int value) {
if (top == MAX_STACK_SIZE - 1) {
fprintf(stderr, "Stack overflow!\n");
exit(EXIT_FAILURE);
}
stack[++top] = value;
}
int pop() {
if (top == -1) {
fprintf(stderr, "Stack underflow!\n");
exit(EXIT_FAILURE);
}
return stack[top--];
}
int evaluate(char *expr[]) {
int i = 0;
while (expr[i] != NULL) {
if (isdigit(expr[i][0])) {
push(atoi(expr[i]));
} else {
int x = pop();
int y = pop();
switch (expr[i][0]) {
case '+':
push(y + x);
break;
case '-':
push(y - x);
break;
case '*':
push(y * x);
break;
case '/':
push(y / x);
break;
default:
fprintf(stderr, "Invalid operator: %s\n", expr[i]);
exit(EXIT_FAILURE);
}
}
i++;
}
return pop();
}
int main() {
char *expr[] = {"3", "4", "5", "+", "*", "2", "-", "6", "/"};
int result = evaluate(expr);
printf("Result: %d\n", result);
return 0;
}
```
这个例子中,我们使用了栈来保存操作数,遇到操作符时从栈中取出相应数目的操作数进行计算,并将结果压入栈中。最终,栈中只剩下一个元素,即表达式的值。
阅读全文