用C语言写一个计算后缀表达式的算法
时间: 2023-12-29 11:09:44 浏览: 80
好的,这是一个简单的用C语言实现计算后缀表达式的算法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define MAX_STACK_SIZE 100 // 定义栈的最大容量
typedef struct {
int top; // 栈顶指针
int data[MAX_STACK_SIZE]; // 栈元素数组
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
bool isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
bool isFull(Stack *s) {
return s->top == MAX_STACK_SIZE - 1;
}
// 入栈
bool push(Stack *s, int value) {
if (isFull(s)) {
return false;
}
s->data[++s->top] = value;
return true;
}
// 出栈
bool pop(Stack *s, int *value) {
if (isEmpty(s)) {
return false;
}
*value = s->data[s->top--];
return true;
}
// 获取栈顶元素
bool getTop(Stack *s, int *value) {
if (isEmpty(s)) {
return false;
}
*value = s->data[s->top];
return true;
}
// 计算后缀表达式的值
int calculatePostfixExpression(char *postfix) {
Stack s;
initStack(&s);
int len = strlen(postfix);
for (int i = 0; i < len; i++) {
char ch = postfix[i];
if (ch >= '0' && ch <= '9') { // 如果是数字,直接入栈
push(&s, ch - '0');
} else { // 如果是操作符,弹出栈顶的两个元素进行计算
int num1, num2;
pop(&s, &num2);
pop(&s, &num1);
switch (ch) {
case '+': push(&s, num1 + num2); break;
case '-': push(&s, num1 - num2); break;
case '*': push(&s, num1 * num2); break;
case '/': push(&s, num1 / num2); break;
}
}
}
int result;
pop(&s, &result);
return result;
}
int main() {
char postfix[100];
printf("请输入后缀表达式:");
scanf("%s", postfix);
int result = calculatePostfixExpression(postfix);
printf("计算结果为:%d\n", result);
return 0;
}
```
该算法使用栈来辅助计算后缀表达式。遍历后缀表达式中的每一个字符,如果是数字则直接入栈,如果是操作符则弹出栈顶的两个元素进行计算,然后将计算结果入栈。最后,栈中剩下的唯一元素就是表达式的计算结果。
阅读全文