利用堆栈实现基本的算术表达式求值的C语言代码
时间: 2023-10-26 17:16:35 浏览: 85
以下是基于堆栈实现基本算术表达式求值的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 堆栈结构体
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化堆栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断堆栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断堆栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
void push(Stack *s, int item) {
if (isFull(s)) {
printf("Stack Overflow\n");
exit(EXIT_FAILURE);
}
s->data[++(s->top)] = item;
}
// 出栈
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack Underflow\n");
exit(EXIT_FAILURE);
}
return s->data[(s->top)--];
}
// 获取栈顶元素
int peek(Stack *s) {
if (isEmpty(s)) {
printf("Stack Underflow\n");
exit(EXIT_FAILURE);
}
return s->data[s->top];
}
// 判断是否为运算符
int isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
// 执行运算
int operate(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: exit(EXIT_FAILURE);
}
}
// 表达式求值
int evaluate(char *expr) {
Stack s;
initStack(&s);
int i;
for (i = 0; expr[i] != '\0'; i++) {
char c = expr[i];
if (c == ' ' || c == '\t') {
continue;
} else if (isdigit(c)) {
int operand = 0;
while (isdigit(c)) {
operand = operand * 10 + (c - '0');
c = expr[++i];
}
i--;
push(&s, operand);
} else if (isOperator(c)) {
int op2 = pop(&s);
int op1 = pop(&s);
int result = operate(op1, op2, c);
push(&s, result);
} else {
printf("Invalid Expression\n");
exit(EXIT_FAILURE);
}
}
return pop(&s);
}
int main() {
char expr[MAX_SIZE];
printf("Enter an arithmetic expression: ");
fgets(expr, MAX_SIZE, stdin);
int result = evaluate(expr);
printf("Result = %d\n", result);
return 0;
}
```
使用方法:运行程序后,输入一个算术表达式,程序将输出表达式的求值结果。例如,输入 "3 + 4 * 2",程序将输出 "Result = 11"。
阅读全文