C语言前缀表达式计算代码
时间: 2023-08-18 09:42:52 浏览: 121
以下是C语言中计算前缀表达式的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
// 定义栈结构
typedef struct {
int top;
int data[MAX_STACK_SIZE];
} stack;
// 初始化栈
void init_stack(stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty_stack(stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int is_full_stack(stack *s) {
return s->top == MAX_STACK_SIZE - 1;
}
// 入栈
void push(stack *s, int x) {
if (is_full_stack(s)) {
printf("Stack Overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
// 出栈
int pop(stack *s) {
if (is_empty_stack(s)) {
printf("Stack Underflow\n");
exit(1);
}
return s->data[s->top--];
}
// 计算前缀表达式的值
int evaluate_prefix_expression(char *expression) {
stack s;
int i, len, op1, op2, result;
char *token;
init_stack(&s); // 初始化栈
len = strlen(expression); // 计算表达式长度
// 从右至左扫描表达式
for (i = len - 1; i >= 0; i--) {
// 如果是空格,则跳过
if (expression[i] == ' ') {
continue;
}
// 如果是操作数,则入栈
if (expression[i] >= '0' && expression[i] <= '9') {
token = &expression[i];
push(&s, atoi(token));
// 将指针移动至下一个操作数
while (i > 0 && expression[i - 1] >= '0' && expression[i - 1] <= '9') {
i--;
}
}
// 如果是运算符,则从栈中取出相应数量的操作数进行计算
else {
op1 = pop(&s);
op2 = pop(&s);
switch (expression[i]) {
case '+':
result = op1 + op2;
break;
case '-':
result = op1 - op2;
break;
case '*':
result = op1 * op2;
break;
case '/':
result = op1 / op2;
break;
default:
printf("Invalid Operator\n");
exit(1);
}
// 将计算结果入栈
push(&s, result);
}
}
// 返回计算结果
return pop(&s);
}
int main() {
char expression[100];
printf("Enter Prefix Expression: ");
gets(expression); // 输入前缀表达式
printf("Result: %d\n", evaluate_prefix_expression(expression)); // 计算表达式并输出结果
return 0;
}
```
注意:该代码仅作为示例参考,实际应用中需要根据具体情况进行修改和优化。