逆波兰表达式求值c语言
时间: 2023-11-07 18:47:32 浏览: 209
逆波兰表达式(Reverse Polish Notation,RPN)是一种将运算符放在操作数之后的数学表达法,可以用来表示算术表达式。在C语言中,我们可以使用栈来求解逆波兰表达式。
以下是一个用C语言实现逆波兰表达式求值的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_SIZE 100 // 栈的最大容量
// 定义栈结构
typedef struct {
double data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack *stack) {
stack->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *stack) {
return stack->top == -1;
}
// 判断栈是否已满
int isFull(Stack *stack) {
return stack->top == MAX_SIZE - 1;
}
// 入栈
void push(Stack *stack, double value) {
if (isFull(stack)) {
printf("Stack is full\n");
exit(1);
}
stack->top++;
stack->data[stack->top] = value;
}
// 出栈
double pop(Stack *stack) {
if (isEmpty(stack)) {
printf("Stack is empty\n");
exit(1);
}
double value = stack->data[stack->top];
stack->top--;
return value;
}
// 逆波兰表达式求值
double evaluateRPN(char *expression) {
Stack stack;
initStack(&stack);
char *token = expression;
double operand1, operand2, result;
while (*token != '\0') {
if (isdigit(*token)) {
push(&stack, atof(token));
} else if (*token == '+' || *token == '-' || *token == '*' || *token == '/') {
operand2 = pop(&stack);
operand1 = pop(&stack);
switch (*token) {
case '+':
result = operand1 + operand2;
break;
case '-':
result = operand1 - operand2;
break;
case '*':
result = operand1 * operand2;
break;
case '/':
result = operand1 / operand2;
break;
}
push(&stack, result);
}
// 移动到下一个token
while (*token != ' ' && *token != '\0') {
token++;
}
if (*token == ' ') {
token++;
}
}
return pop(&stack);
}
int main() {
char expression[] = "5 3 4 * + 2 /";
double result = evaluateRPN(expression);
printf("Result: %.2f\n", result);
return 0;
}
```
以上代码可以通过使用栈来实现逆波兰表达式的求值。在主函数中,我们定义了一个逆波兰表达式"5 3 4 * + 2 /",并调用`evaluateRPN`函数来求解该表达式的值。最终输出结果为"Result: 7.50"。
阅读全文