用栈编写表达式求值C语言
时间: 2023-07-01 20:20:00 浏览: 136
好的,我可以为您介绍一下用栈来实现表达式求值的C语言代码。
首先,我们需要定义一个栈结构体,用来存储操作符和操作数。例如:
```
typedef struct {
int top;
int data[100];
} Stack;
```
接下来,我们需要实现栈的基本操作,包括入栈、出栈、判断栈是否为空等操作。例如:
```
void push(Stack *s, int value) {
s->data[++s->top] = value;
}
int pop(Stack *s) {
return s->data[s->top--];
}
int is_empty(Stack *s) {
return s->top == -1;
}
```
有了栈的基本操作,我们就可以开始实现表达式求值了。具体步骤如下:
1. 初始化一个空栈。
2. 从左到右遍历表达式中的每一个字符,如果是数字,则将其转换为整数并入栈。
3. 如果是操作符,则从栈中弹出两个数,进行计算,并将计算结果入栈。
4. 最后栈中只剩下一个数,即为表达式的计算结果。
下面是用栈实现表达式求值的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int top;
int data[100];
} Stack;
void push(Stack *s, int value) {
s->data[++s->top] = value;
}
int pop(Stack *s) {
return s->data[s->top--];
}
int is_empty(Stack *s) {
return s->top == -1;
}
int calculate(int a, int b, char op) {
switch(op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
return 0;
}
}
int evaluate(char *expr) {
Stack s;
s.top = -1;
int i, a, b;
char op;
for (i = 0; expr[i] != '\0'; i++) {
if (expr[i] >= '0' && expr[i] <= '9') {
push(&s, expr[i] - '0');
} else {
b = pop(&s);
a = pop(&s);
op = expr[i];
push(&s, calculate(a, b, op));
}
}
return pop(&s);
}
int main() {
char expr[100];
printf("请输入表达式:");
scanf("%s", expr);
printf("%s = %d\n", expr, evaluate(expr));
return 0;
}
```
希望这段代码能够帮助到您,有任何问题请随时提出。
阅读全文
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)