使用C语言书写计算逆波兰表达式的结果的代码
时间: 2023-03-29 21:03:38 浏览: 63
以下是使用C语言书写计算逆波兰表达式的结果的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
double data[MAX_STACK_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_STACK_SIZE - 1;
}
void push(Stack *s, double x) {
if (isFull(s)) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
double pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
double calculate(char *expr) {
Stack s;
initStack(&s);
char *token = strtok(expr, " ");
while (token != NULL) {
if (isdigit(token[])) {
push(&s, atof(token));
} else {
double op2 = pop(&s);
double op1 = pop(&s);
switch (token[]) {
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: %c\n", token[]);
exit(1);
}
}
token = strtok(NULL, " ");
}
double result = pop(&s);
if (!isEmpty(&s)) {
printf("Invalid expression\n");
exit(1);
}
return result;
}
int main() {
char expr[] = "5 1 2 + 4 * + 3 -";
double result = calculate(expr);
printf("Result: %g\n", result);
return ;
}