用C语言写一个将中缀表达式转为后缀表达式的算法
时间: 2024-02-15 20:03:43 浏览: 75
好的,下面是将中缀表达式转为后缀表达式的C语言算法:
```
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 100
char stack[SIZE];
int top = -1;
void push(char item) {
if (top >= SIZE - 1) {
printf("\nStack Overflow.");
} else {
top = top + 1;
stack[top] = item;
}
}
char pop() {
char item ;
if (top < 0) {
printf("stack under flow: invalid infix expression");
getchar();
exit(1);
} else {
item = stack[top];
top = top - 1;
return (item);
}
}
int is_operator(char symbol) {
if (symbol == '^' || symbol == '*' || symbol == '/' || symbol == '+' || symbol == '-') {
return 1;
} else {
return 0;
}
}
int precedence(char symbol) {
if (symbol == '^') {
return (3);
} else if (symbol == '*' || symbol == '/') {
return (2);
} else if (symbol == '+' || symbol == '-') {
return (1);
} else {
return (0);
}
}
void infix_to_postfix(char infix_exp[], char postfix_exp[]) {
int i, j;
char item;
char x;
push('(');
strcat(infix_exp, ")");
i = 0;
j = 0;
item = infix_exp[i];
while (item != '\0') {
if (item == '(') {
push(item);
} else if (isdigit(item) || isalpha(item)) {
postfix_exp[j] = item;
j++;
} else if (is_operator(item) == 1) {
x = pop();
while (is_operator(x) == 1 && precedence(x) >= precedence(item)) {
postfix_exp[j] = x;
j++;
x = pop();
}
push(x);
push(item);
} else if (item == ')') {
x = pop();
while (x != '(') {
postfix_exp[j] = x;
j++;
x = pop();
}
} else {
printf("\nInvalid infix Expression.\n");
getchar();
exit(1);
}
i++;
item = infix_exp[i];
}
if (top > 0) {
printf("\nInvalid infix Expression.\n");
getchar();
exit(1);
}
postfix_exp[j] = '\0';
}
int main() {
char infix[SIZE], postfix[SIZE];
printf("\nEnter Infix expression : ");
gets(infix);
infix_to_postfix(infix, postfix);
printf("Postfix Expression: ");
puts(postfix);
return 0;
}
```
这段代码中,我们定义了一个char类型的栈,用于存储符号,然后定义了一些函数,包括push()和pop()函数来实现入栈和出栈操作,is_operator()函数来判断符号是否为运算符,precedence()函数用于确定符号的优先级,以及infix_to_postfix()函数来将中缀表达式转为后缀表达式。在main()函数中,我们输入一个中缀表达式,然后调用infix_to_postfix()函数将其转换为后缀表达式,最后输出后缀表达式。
注意:这段代码中,使用了gets()函数和strcat()函数,这两个函数都是不安全的,建议在实际使用时使用安全的替代函数来保证代码的安全性。
阅读全文