运用c++实现逆波兰表达式的简单计算器
时间: 2023-11-20 12:49:14 浏览: 85
对于实现逆波兰表达式的简单计算器,可以按照以下步骤进行操作:
1. 创建一个栈来存储操作数。
2. 遍历逆波兰表达式,对于每个元素执行以下步骤:
- 如果是数字,将其压入栈中。
- 如果是操作符,从栈中弹出两个操作数进行运算,并将结果再次压入栈中。
3. 最后栈中的唯一元素就是计算结果。
以下是一个简单的C代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
// 栈结构定义
typedef struct {
int top;
int data[MAX_STACK_SIZE];
} Stack;
// 初始化栈
void initialize(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;
}
// 入栈
void push(Stack* s, int value) {
if (is_full(s)) {
printf("栈已满,无法入栈。\n");
exit(1);
}
s->data[++s->top] = value;
}
// 出栈
int pop(Stack* s) {
if (is_empty(s)) {
printf("栈为空,无法出栈。\n");
exit(1);
}
return s->data[s->top--];
}
// 计算逆波兰表达式
int calculate(char* expression) {
Stack s;
initialize(&s);
int i = 0;
while (expression[i] != '\0') {
if (isdigit(expression[i])) {
push(&s, expression[i] - '0');
} else {
int operand1 = pop(&s);
int operand2 = pop(&s);
switch (expression[i]) {
case '+':
push(&s, operand1 + operand2);
break;
case '-':
push(&s, operand1 - operand2);
break;
case '*':
push(&s, operand1 * operand2);
break;
case '/':
push(&s, operand1 / operand2);
break;
default:
printf("非法操作符:%c\n", expression[i]);
exit(1);
}
}
i++;
}
int result = pop(&s);
if (!is_empty(&s)) {
printf("逆波兰表达式不合法。\n");
exit(1);
}
return result;
}
int main() {
char expression[] = "34+56-*";
int result = calculate(expression);
printf("计算结果:%d\n", result);
return 0;
}
```
此代码中的逆波兰表达式为"34+56-*",计算结果为14。
阅读全文