c语言- -数据结构- -实现逆波兰式
时间: 2024-10-29 20:16:34 浏览: 36
逆波兰式(Reverse Polish Notation,RPN),也称为后缀表达式,是一种数学表达式的书写方式,数字直接跟在其操作数之后。在C语言中,我们可以使用栈数据结构来实现逆波兰式求值。以下是基本步骤:
1. 定义一个栈来存储操作数。
2. 遇到数字时,将其压入栈中。
3. 遇到运算符时,从栈顶取出两个操作数进行计算,并将结果压回栈中,然后继续处理下一个运算符。
4. 当所有输入都处理完后,栈顶剩余的就是最终的结果。
下面是一个简单的逆波兰式计算器实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义操作函数
double applyOp(char op, double a, double b) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b; // 注意除法可能导致浮点误差
default: return 0; // 非法运算符
}
}
int main() {
char* input = "2 3 + 4 *"; // 逆波兰表达式
char tokens[] = {"2", "3", "+", "4", "*", NULL}; // 分割后的token数组
int i = 0;
stack_t* stack = create_stack(); // 初始化栈
while (tokens[i] != NULL) {
if (isdigit(tokens[i])) { // 如果是数字,入栈
push(stack, atof(tokens[i])); // 转换为double并压入栈
} else { // 否则是运算符
double val2 = pop(stack);
double val1 = pop(stack); // 取出栈顶两个元素进行计算
double result = applyOp(tokens[i], val1, val2);
push(stack, result); // 计算结果放回栈
}
i++;
}
printf("结果: %.2f\n", get_top(stack)); // 输出栈顶结果
destroy_stack(stack); // 销毁栈
return 0;
}
```
阅读全文