用C语言实现实现栈的应用表达式求值 采用顺序栈实现表达式求值 从运行界面输入一个表达式 该表达式包括加法 减法 乘法 除法
时间: 2024-02-27 09:52:37 浏览: 23
好的,让我为您分享 C 语言实现顺序栈求解表达式的代码。
```
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define MAXBUFFER 10
typedef struct {
char *base;
char *top;
int stacksize;
} SqStack;
void InitStack(SqStack *S) {
S->base = (char *) malloc(STACK_INIT_SIZE * sizeof(char));
if (!S->base) exit(0);
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
}
void Push(SqStack *S, char e) {
if (S->top - S->base >= S->stacksize) {
S->base = (char *) realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(char));
if (!S->base) exit(0);
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top)++ = e;
}
char Pop(SqStack *S) {
if (S->top == S->base) exit(0);
return *--(S->top);
}
char GetTop(SqStack *S) {
if (S->top != S->base) return *(S->top - 1);
}
int StackLen(SqStack S) {
return S.top - S.base;
}
int main() {
SqStack s;
InitStack(&s);
char buffer[MAXBUFFER];
char c, d;
int len, i;
double data, x, y;
printf("请输入表达式:");
scanf("%s", buffer);
len = strlen(buffer);
i = 0;
while (i < len) {
c = buffer[i];
if (isdigit(c)) {
data = c - '0';
while (isdigit(buffer[++i])) {
data = data * 10 + buffer[i] - '0';
}
Push(&s, data);
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
x = Pop(&s);
y = Pop(&s);
switch (c) {
case '+':
d = x + y;
break;
case '-':
d = y - x;
break;
case '*':
d = x * y;
break;
case '/':
d = y / x;
break;
}
Push(&s, d);
i++;
} else {
i++;
}
}
printf("计算结果为:%.2f\n", Pop(&s));
return 0;
}
```
这段代码中,我们采用了顺序栈来实现表达式求值。在输入表达式时,我们采用字符数组来存储输入的表达式,然后遍历该字符数组,将数字字符转化为数字,然后压入栈中,遇到运算符时,弹出栈顶的两个元素,进行相应的运算,将结果再次压入栈中,直到遍历完整个字符数组。最终,栈中剩下的元素就是表达式的计算结果。
需要注意的是,在这段代码中,我们只考虑了表达式中的加减乘除运算,如果表达式中还包括其他的运算符,需要根据具体情况进行相应的修改。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)