我需要一个c语言实现堆栈求值的代码
时间: 2023-06-12 14:04:01 浏览: 50
下面是一个简单的C语言实现堆栈求值的代码,可以实现基本的四则运算:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
double stack[MAX_STACK_SIZE];
int top = -1;
void push(double value) {
if (top >= MAX_STACK_SIZE - 1) {
printf("Stack overflow!\n");
exit(EXIT_FAILURE);
}
stack[++top] = value;
}
double pop() {
if (top < 0) {
printf("Stack underflow!\n");
exit(EXIT_FAILURE);
}
return stack[top--];
}
int main() {
char ch;
double op1, op2, result;
printf("Enter the expression: ");
while ((ch = getchar()) != '\n') {
if (isdigit(ch)) {
ungetc(ch, stdin);
scanf("%lf", &result);
push(result);
} else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {
op2 = pop();
op1 = pop();
switch (ch) {
case '+': push(op1 + op2); break;
case '-': push(op1 - op2); break;
case '*': push(op1 * op2); break;
case '/': push(op1 / op2); break;
}
}
}
result = pop();
printf("Result = %.2f\n", result);
return 0;
}
```
在这个实现中,我们使用了一个数组作为堆栈,并定义了两个函数push和pop,分别用于将元素压入堆栈和弹出堆栈。
我们还使用了一个while循环来读取用户输入的表达式,如果读到的是数字,则将它压入堆栈中;如果读到的是运算符,则从堆栈中弹出两个操作数,并根据运算符进行计算,然后将结果压入堆栈中。
最后,当读取完整个表达式后,堆栈中只剩下一个元素,就是表达式的计算结果。我们将这个结果弹出堆栈并输出即可。