以C语言利用顺序栈实现表达式求解的代码:
时间: 2023-10-26 10:11:08 浏览: 79
以下是一个基于顺序栈实现表达式求解的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define STACK_SIZE 50
typedef struct {
int top;
int data[STACK_SIZE];
} Stack;
void init(Stack *s) {
s->top = -1;
}
void push(Stack *s, int item) {
if (s->top == STACK_SIZE - 1) {
printf("Stack overflow!\n");
exit(1);
}
s->data[++s->top] = item;
}
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack underflow!\n");
exit(1);
}
return s->data[s->top--];
}
int empty(Stack *s) {
return s->top == -1;
}
int evaluate(char *expr) {
Stack s;
init(&s);
int i, op1, op2;
char ch;
for (i = 0; expr[i] != '\0'; i++) {
ch = expr[i];
if (isdigit(ch)) {
push(&s, ch - '0');
} else {
op2 = pop(&s);
op1 = pop(&s);
switch (ch) {
case '+':
push(&s, op1 + op2);
break;
case '-':
push(&s, op1 - op2);
break;
case '*':
push(&s, op1 * op2);
break;
case '/':
push(&s, op1 / op2);
break;
default:
printf("Invalid operator!\n");
exit(1);
}
}
}
return pop(&s);
}
int main() {
char expr[STACK_SIZE];
printf("Enter an expression: ");
fgets(expr, STACK_SIZE, stdin);
printf("Result: %d\n", evaluate(expr));
return 0;
}
```
该代码使用了一个`Stack`结构体来实现顺序栈,并提供了`init`、`push`、`pop`和`empty`等基本操作函数。在`evaluate`函数中,遍历表达式中的每个字符,如果是数字则入栈,如果是运算符则弹出栈顶的两个操作数进行运算,并将结果入栈。最后返回栈中剩余的唯一元素作为表达式的值。在`main`函数中,使用`fgets`函数从标准输入读入一个表达式,并输出其求值结果。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.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)
![](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)
![](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)
![](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)