写一段代码,用c++的栈实现表达式求解,并实现。
时间: 2023-06-06 18:07:43 浏览: 116
c语言 利用栈实现表达式求解
3星 · 编辑精心推荐
好的,这是一段基于栈的表达式求解代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
double stack[MAX_STACK_SIZE];
} Stack;
void init_stack(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == MAX_STACK_SIZE - 1;
}
int push(Stack *s, double val) {
if (is_full(s)) {
return 0;
}
s->stack[++(s->top)] = val;
return 1;
}
double pop(Stack *s) {
if (is_empty(s)) {
return -1;
}
return s->stack[(s->top)--];
}
double peek(Stack *s) {
if (is_empty(s)) {
return -1;
}
return s->stack[s->top];
}
double evaluate(Stack *s, char *exp) {
double num, op1, op2;
int i;
for (i = 0; exp[i] != '\0'; i++) {
if (isdigit(exp[i])) {
num = exp[i] - '0';
while (isdigit(exp[++i])) {
num = num * 10 + (exp[i] - '0');
}
push(s, num);
i--;
} else {
op2 = pop(s);
op1 = pop(s);
switch (exp[i]) {
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:
return -1;
}
}
}
return pop(s);
}
int main() {
Stack s;
init_stack(&s);
char exp[100];
printf("请输入一个计算表达式: ");
scanf("%[^\n]", exp);
double result = evaluate(&s, exp);
if (result != -1) {
printf("%s = %.2f", exp, result);
} else {
printf("输入的非法表达式");
}
return 0;
}
```
该程序首先定义了一个栈的结构体,包含栈的数组和栈顶指针。然后定义了栈的一些基本操作函数,如初始化栈,判断栈是否为空或已满,入栈和弹出栈顶元素等操作。
接下来,定义了一个用于计算表达式的函数,该函数逐个字符扫描表达式,如果是数字,则将数字入栈;否则,从栈中弹出两个操作数,并根据运算符进行计算,将结果再入栈,直到整个表达式计算完成。
最后,在main函数中读入用户输入的表达式,并调用evaluate函数进行计算,并将结果输出。
阅读全文