用c语言数据结构编写:简易计算器
时间: 2023-09-09 08:13:39 浏览: 55
好的,以下是一个简单的用 C 语言数据结构编写的计算器:
```c
#include <stdio.h>
#include <stdlib.h>
struct Stack {
int top;
int capacity;
int* array;
};
// 创建一个栈
struct Stack* createStack(int capacity) {
struct Stack* stack = (struct Stack*) malloc(sizeof(struct Stack));
stack->capacity = capacity;
stack->top = -1;
stack->array = (int*) malloc(stack->capacity * sizeof(int));
return stack;
}
// 判断栈是否为空
int isEmpty(struct Stack* stack) {
return stack->top == -1;
}
// 判断栈是否已满
int isFull(struct Stack* stack) {
return stack->top == stack->capacity - 1;
}
// 入栈操作
void push(struct Stack* stack, int item) {
if (isFull(stack))
return;
stack->array[++stack->top] = item;
}
// 出栈操作
int pop(struct Stack* stack) {
if (isEmpty(stack))
return -1;
return stack->array[stack->top--];
}
// 获取栈顶元素
int peek(struct Stack* stack) {
if (isEmpty(stack))
return -1;
return stack->array[stack->top];
}
// 判断字符是否为操作符
int isOperator(char ch) {
return ch == '+' || ch == '-' || ch == '*' || ch == '/';
}
// 计算表达式
int evaluate(char* expression) {
struct Stack* stack = createStack(strlen(expression));
int i, operand1, operand2;
for (i = 0; expression[i]; i++) {
if (isdigit(expression[i])) {
push(stack, expression[i] - '0');
}
else if (isOperator(expression[i])) {
operand2 = pop(stack);
operand1 = pop(stack);
switch (expression[i]) {
case '+': push(stack, operand1 + operand2); break;
case '-': push(stack, operand1 - operand2); break;
case '*': push(stack, operand1 * operand2); break;
case '/': push(stack, operand1 / operand2); break;
}
}
}
return pop(stack);
}
int main() {
char expression[100];
printf("请输入一个表达式:");
scanf("%s", expression);
int result = evaluate(expression);
printf("计算结果是:%d\n", result);
return 0;
}
```
这个计算器支持四则运算,可以输入包含数字和运算符的表达式,例如 "3+4*2-1",然后计算出结果并输出。