用C语言写一个计算前缀表达式的算法
时间: 2023-12-29 19:09:45 浏览: 75
可以使用栈来实现计算前缀表达式的算法,具体步骤如下:
1. 从右往左遍历前缀表达式,每遇到一个数字或符号就将其入栈。
2. 当遇到一个运算符号时,弹出栈顶的两个数字进行计算,并将计算结果入栈。
3. 最后栈中剩下的数字就是表达式的计算结果。
以下是用C语言实现的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_SIZE 100
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
void init(Stack *s) {
s->top = -1;
}
void push(Stack *s, int val) {
if (s->top == MAX_SIZE - 1) {
printf("Stack overflow!\n");
exit(1);
}
s->data[++s->top] = val;
}
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack underflow!\n");
exit(1);
}
return s->data[s->top--];
}
int is_operator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
int evaluate_prefix(char *expr) {
Stack s;
init(&s);
int i, len, op1, op2, result;
len = strlen(expr);
for (i = len - 1; i >= 0; i--) {
if (isdigit(expr[i])) {
push(&s, expr[i] - '0');
} else if (is_operator(expr[i])) {
op1 = pop(&s);
op2 = pop(&s);
switch (expr[i]) {
case '+':
result = op1 + op2;
break;
case '-':
result = op1 - op2;
break;
case '*':
result = op1 * op2;
break;
case '/':
result = op1 / op2;
break;
}
push(&s, result);
}
}
return pop(&s);
}
int main() {
char expr[MAX_SIZE];
printf("Enter a prefix expression: ");
scanf("%s", expr);
printf("Result: %d\n", evaluate_prefix(expr));
return 0;
}
```
注意,该算法假设输入的前缀表达式是合法的,如果有错误输入可能会导致程序崩溃。
阅读全文