实现一个简单的计算器,c 栈
时间: 2023-10-23 19:03:27 浏览: 73
实现一个简单的计算器可以借助于c中的栈数据结构。
首先,我们可以定义一个栈结构,用来存储计算器需要的操作数和操作符。一般来说,栈中的元素可以包括数字和符号两种类型。
然后,我们可以通过使用栈来解析输入的表达式。遍历输入的表达式,当遇到数字时,将其压入栈中;当遇到操作符时,从栈中弹出两个数字进行运算,并将结果压入栈中。
具体步骤如下:
1. 创建一个栈,用来存储操作数和操作符。
2. 遍历输入的表达式,对于每一个字符:
- 如果是数字,将其转换成整数并将其压入栈中。
- 如果是操作符,从栈中弹出两个操作数,并按照该操作符进行运算,将结果压入栈中。
3. 最后,将栈中的最后一个元素弹出,即为计算结果。
以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义栈结构
typedef struct {
int top;
int *data;
} Stack;
// 初始化栈
void initStack(Stack *stack, int maxSize) {
stack->top = -1;
stack->data = (int*)malloc(maxSize * sizeof(int));
}
// 压栈
void push(Stack *stack, int num) {
stack->data[++stack->top] = num;
}
// 弹栈
int pop(Stack *stack) {
return stack->data[stack->top--];
}
// 判断栈是否为空
int isEmpty(Stack *stack) {
return stack->top == -1 ? 1 : 0;
}
// 实现简单的计算器
int calculate(char *expression) {
int len = strlen(expression);
Stack stack;
initStack(&stack, len);
for (int i = 0; i < len; i++) {
if (expression[i] >= '0' && expression[i] <= '9') {
push(&stack, expression[i] - '0');
} else {
int num1 = pop(&stack);
int num2 = pop(&stack);
switch (expression[i]) {
case '+':
push(&stack, num1 + num2);
break;
case '-':
push(&stack, num2 - num1);
break;
case '*':
push(&stack, num2 * num1);
break;
case '/':
push(&stack, num2 / num1);
break;
}
}
}
int result = pop(&stack);
free(stack.data);
return result;
}
int main() {
char expression[] = "3 4 + 5 *";
int result = calculate(expression);
printf("计算结果:%d\n", result);
return 0;
}
```
上述代码实现了一个简单的计算器,可以计算输入表达式的结果。例如,在主函数中,我们将中缀表达式"3 4 + 5 \*"传递给calculate函数进行计算,并输出结果。