c语言数据结构实现栈的计算器
时间: 2024-10-10 13:06:55 浏览: 17
在C语言中,我们可以使用数组或链表作为基础数据结构来实现一个简单的栈计算器。这里我将以递归队列(即数组实现)为例来说明:
```c
#include <stdio.h>
#define MAX_SIZE 50
// 定义栈结构体
typedef struct {
int top; // 栈顶指针
int capacity; // 栈容量
int data[MAX_SIZE]; // 存储数据的数组
} Stack;
// 初始化栈
Stack* createStack(int size) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->top = -1;
stack->capacity = size;
return stack;
}
// 判断栈是否为空
int isEmpty(Stack* s) {
return s-1;
}
// 判断栈是否已满
int isFull(Stack* s) {
return s->top == s->capacity - 1;
}
// 入栈操作
void push(Stack* s, int val) {
if (isFull(s)) {
printf("Stack overflow.\n");
return;
}
s->data[++s->top] = val;
}
// 出栈操作
int pop(Stack* s) {
if (isEmpty(s)) {
printf("Stack underflow.\n");
return -1;
}
return s->data[s->top--];
}
// 删除栈并释放内存
void destroyStack(Stack* s) {
free(s);
}
// 使用栈实现简单计算器,假设只支持加减运算
int calculate(char op1, char op2, char oper) {
Stack* stack = createStack(3);
push(stack, op1 - '0'); // 字符转数字
push(stack, op2 - '0');
switch (oper) {
case '+':
push(stack, pop(stack) + pop(stack));
break;
case '-':
push(stack, pop(stack) - pop(stack));
break;
default:
printf("Invalid operator.\n");
return -1;
}
return pop(stack); // 返回结果
}
int main() {
char op1[] = "1", op2[] = "2";
char oper = '+';
int result = calculate(op1[0], op2[0], oper);
if (result != -1)
printf("Result: %d\n", result);
destroyStack(&stack);
return 0;
}
```
这个程序创建了一个栈,用于存储两个操作数和一个运算符。当遇到运算符时,它会从栈中弹出最近的两个操作数,执行相应的运算,并将结果压回栈中。注意这只是一个简化版本,实际的计算器可能会更复杂,处理更多类型的运算符、括号等。