中缀表达式转后缀表达式的c语言代码
时间: 2023-09-29 07:03:09 浏览: 115
中缀表达式转后缀表达式是一个经典的算法问题,可以利用栈来实现。下面是一个简单的c语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
// 判断是否为操作符
int isOperator(char c) {
if (c == '+' || c == '-' || c == '*' || c == '/') {
return 1;
}
return 0;
}
// 判断操作符优先级
int getPriority(char c) {
if (c == '+' || c == '-') {
return 1;
} else if (c == '*' || c == '/') {
return 2;
}
return 0;
}
// 中缀表达式转后缀表达式
char * infixToPostfix(char * infixExp) {
char * postfixExp = (char *) malloc(sizeof(char) * MAX_SIZE);
int i, j;
char c;
char stack[MAX_SIZE];
int top = -1;
for (i = 0, j = 0; i < strlen(infixExp); i++) {
c = infixExp[i];
if (c == ' ') {
continue;
}
if (c == '(') {
stack[++top] = c;
} else if (c == ')') {
while (stack[top] != '(') {
postfixExp[j++] = stack[top--];
}
top--;
} else if (isOperator(c)) {
while (top >= 0 && getPriority(stack[top]) >= getPriority(c)) {
postfixExp[j++] = stack[top--];
}
stack[++top] = c;
} else {
while (i < strlen(infixExp) && infixExp[i] != ' ' && !isOperator(infixExp[i])) {
postfixExp[j++] = infixExp[i++];
}
postfixExp[j++] = ' ';
i--;
}
}
while (top >= 0) {
postfixExp[j++] = stack[top--];
}
postfixExp[j] = '\0';
return postfixExp;
}
int main() {
char infixExp[MAX_SIZE];
char * postfixExp;
printf("请输入中缀表达式:\n");
fgets(infixExp, MAX_SIZE, stdin);
postfixExp = infixToPostfix(infixExp);
printf("后缀表达式为:%s\n", postfixExp);
free(postfixExp);
return 0;
}
```
该代码中使用了一个栈来存储操作符,遍历中缀表达式,根据操作符的优先级和左右括号的情况,将操作符转换成后缀表达式。最后将栈中剩余的操作符全部出栈,即可得到后缀表达式。
阅读全文