c语言求4+2*3-10/5的值,数据结构代码
时间: 2024-03-25 12:41:04 浏览: 84
以下是使用栈实现计算表达式的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h> // 包含malloc和free函数
// 定义栈结构体
typedef struct {
int top; // 栈顶指针
int *data; // 栈的数据
int size; // 栈的大小
} Stack;
// 初始化栈
void initStack(Stack *s, int size) {
s->top = -1;
s->data = (int *)malloc(sizeof(int) * size);
s->size = size;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == s->size - 1;
}
// 入栈
void push(Stack *s, int x) {
if (isFull(s)) {
printf("Stack is full.\n");
return;
}
s->top++;
s->data[s->top] = x;
}
// 出栈
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1;
}
int x = s->data[s->top];
s->top--;
return x;
}
// 获取栈顶元素
int top(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1;
}
return s->data[s->top];
}
// 计算后缀表达式的值
int calc(char *postfix) {
Stack s;
initStack(&s, 100);
int i = 0;
while (postfix[i] != '\0') {
if (postfix[i] >= '0' && postfix[i] <= '9') { // 如果是数字,进栈
push(&s, postfix[i] - '0');
} else { // 如果是操作符,弹出两个数进行计算
int b = pop(&s);
int a = pop(&s);
switch (postfix[i]) {
case '+':
push(&s, a + b);
break;
case '-':
push(&s, a - b);
break;
case '*':
push(&s, a * b);
break;
case '/':
push(&s, a / b);
break;
default:
printf("Invalid postfix expression.\n");
return -1;
}
}
i++;
}
int result = pop(&s);
free(s.data);
return result;
}
int main() {
char postfix[] = "423*+105/-"; // 后缀表达式
int result = calc(postfix);
printf("Result: %d\n", result);
return 0;
}
```
在上述代码中,我们定义了一个栈结构体,包含栈顶指针、栈的数据和栈的大小。其中,初始化栈、入栈、出栈、获取栈顶元素等基本操作都已经实现。在计算后缀表达式的函数中,我们利用栈来辅助计算。具体实现思路是:遍历后缀表达式,如果是数字则进栈,如果是操作符则弹出两个数进行计算,然后将计算结果进栈。最后栈中只剩下一个元素,即为表达式的值。
阅读全文