波兰表达式求值c++
时间: 2023-09-09 20:13:26 浏览: 212
波兰表达式求值是一种常见的数学表达式求解方法。在C语言中,可以通过使用栈来实现波兰表达式的求值。
首先,将波兰表达式转换为后缀表达式。然后,使用栈来存储运算数,并按照后缀表达式的顺序依次计算运算符。具体步骤如下:
1. 创建一个空栈用于存储运算数。
2. 从左到右遍历后缀表达式的每个元素。
3. 若当前元素是运算符,从栈中弹出两个运算数,并根据该运算符进行计算。将计算结果压入栈中。
4. 若当前元素是运算数,则将其压入栈中。
5. 重复步骤2~4,直到遍历完后缀表达式。
6. 栈中最终剩下的元素即为表达式的求值结果。
下面是一个示例程序实现波兰表达式求值的过程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_SIZE 100
typedef struct {
int data[STACK_SIZE];
int top;
} Stack;
void initStack(Stack *stack) {
stack->top = -1;
}
int isEmpty(Stack *stack) {
return stack->top == -1;
}
void push(Stack *stack, int value) {
if (stack->top == STACK_SIZE - 1) {
printf("Stack overflow!\n");
exit(1);
}
stack->data[++stack->top] = value;
}
int pop(Stack *stack) {
if (isEmpty(stack)) {
printf("Stack underflow!\n");
exit(1);
}
return stack->data[stack->top--];
}
int evaluate(char *expression) {
Stack stack;
int len = strlen(expression);
initStack(&stack);
for (int i = 0; i < len; i++) {
if (expression[i] >= '0' && expression[i] <= '9') {
push(&stack, expression[i] - '0');
} else {
int operand2 = pop(&stack);
int operand1 = pop(&stack);
int result;
switch (expression[i]) {
case '+':
result = operand1 + operand2;
break;
case '-':
result = operand1 - operand2;
break;
case '*':
result = operand1 * operand2;
break;
case '/':
result = operand1 / operand2;
break;
default:
printf("Invalid operator!\n");
exit(1);
}
push(&stack, result);
}
}
return pop(&stack);
}
int main() {
char expression[STACK_SIZE];
printf("请输入波兰表达式:");
fgets(expression, STACK_SIZE, stdin);
// 去除末尾的换行符
if (expression[strlen(expression) - 1] == '\n') {
expression[strlen(expression) - 1] = '\0';
}
int result = evaluate(expression);
printf("表达式的求值结果为:%d\n", result);
return 0;
}
```
你可以根据自己的需要修改表达式的输入方式,例如从命令行参数或文件中读取。运行程序后,输入波兰表达式即可得到求值结果。
阅读全文