表达式求值数据结构C语言代码
时间: 2024-09-30 20:01:57 浏览: 22
在C语言中,表达式求值涉及到语法解析和操作数计算。虽然C本身并不提供内置的数据结构来直接处理这个过程,但我们可以利用基本的数据类型、栈(stack)以及临时变量来模拟一个简单的表达式求值系统。这里是一个非常基础的例子,展示了如何使用递归函数实现前缀(Prefix Notation,也叫算符优先级队列)表达式的求值:
```c
#include <stdio.h>
#include <stdlib.h>
// 假设我们只考虑数字和两个运算符 + 和 *
typedef enum { NUM, OP_ADD, OP_MUL } OperatorType;
struct ExpressionNode {
int value;
char op;
};
int evaluate(const char* expression);
OperatorType precedence(char op);
int applyOp(int a, int b, char op) {
switch (op) {
case '+':
return a + b;
case '*':
return a * b;
default:
printf("Invalid operator\n");
exit(1);
}
}
int evaluate(char token) {
if (isdigit(token)) {
return token - '0';
} else {
return applyOp(evaluate(expression[++index]), evaluate(expression[index++]), token);
}
}
int main() {
char expression[] = "2 3 + 4 *";
index = 0; // 初始化索引
printf("%d\n", evaluate(expression));
return 0;
}
OperatorType precedence(char op) {
switch (op) {
case '+':
case '-':
return OP_ADD;
case '*':
case '/':
return OP_MUL;
default:
return NUM;
}
}
```
在这个例子中,`evaluate` 函数递归地处理表达式,遇到数字则返回其值,遇到运算符则先处理优先级较高的运算。注意这只是一个最简化的版本,实际的求值系统会更复杂,包括处理括号、错误检查等。