栈 表达式求值 C语言代码
时间: 2024-11-03 12:01:44 浏览: 32
栈是一种线性的数据结构,在计算机科学中常用于临时存储数据,遵循先进后出(LIFO,Last In First Out)的原则。在表达式求值中,特别是基于逆波兰表示法(也叫后缀表达式),栈可以用来简化计算过程。
假设我们要计算简单的算术表达式,比如 "3 + 4 * 5",在C语言中,我们可以使用一个栈来逐步处理。首先,我们需要将操作数压入栈,遇到运算符则弹出最近的两个操作数执行相应操作并把结果压回栈。下面是基本的步骤:
1. 定义一个整型数组作为栈容器,并初始化一个变量`top`作为栈顶指针。
2. 遍历输入的表达式字符串,遇到数字就压入栈,遇到运算符就弹出两个操作数进行运算。
3. 当遍历完所有字符,栈中剩下的最后一个元素就是最终的结果。
以下是一个简单的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
int eval(char* exp); // 假设这个函数负责处理逆波兰表达式的求值
int main() {
char expr[] = "3 4 * 5 +"; // 输入的后缀表达式
int result = eval(expr);
printf("Result: %d\n", result);
return 0;
}
// 伪代码(简化版)
int eval(char* exp) {
stack<int> s; // 使用数组模拟栈
int num1, num2;
for (char c : exp) {
if (isdigit(c)) {
num1 = num1 * 10 + c - '0'; // 将字符转成数字
} else { // 运算符
num2 = s.top(); s.pop();
num1 = s.top(); s.pop();
switch (c) {
case '+': s.push(num1 + num2); break;
case '-': s.push(num1 - num2); break;
case '*': s.push(num1 * num2); break;
case '/': s.push(num1 / num2); break;
}
}
}
return s.top(); // 返回最终结果
}
```
请注意,这只是一个简化示例,实际实现可能会更复杂,包括错误检查、处理空栈等情况,并且上述代码并未包含完整处理后缀表达式的评估函数。
阅读全文