用C语言实现后缀表达式转换为中缀表达式
时间: 2023-10-08 14:14:53 浏览: 226
实现中缀表达式到后缀表达式的转换,为InfixToPostfix类实现
5星 · 资源好评率100%
后缀表达式转中缀表达式需要用到栈的数据结构,下面是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_SIZE 50
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void push(Stack *s, char c) {
if (s->top == MAX_SIZE - 1) {
printf("Stack is full.\n");
exit(1);
}
s->data[++s->top] = c;
}
char pop(Stack *s) {
if (s->top == -1) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top--];
}
char peek(Stack *s) {
if (s->top == -1) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top];
}
int is_operator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
void postfix_to_infix(char *postfix, char *infix) {
Stack s;
s.top = -1;
int len = strlen(postfix);
for (int i = 0; i < len; i++) {
char c = postfix[i];
if (isalnum(c)) { // 如果是数字或字母,直接输出
sprintf(infix + strlen(infix), "%c", c);
} else if (is_operator(c)) { // 如果是运算符,弹出两个操作数并加上运算符
char op1 = pop(&s);
char op2 = pop(&s);
sprintf(infix + strlen(infix), "(%c%c%c)", op2, c, op1);
} else {
printf("Invalid character.\n");
exit(1);
}
}
}
int main() {
char postfix[MAX_SIZE];
char infix[MAX_SIZE] = "";
printf("Enter a postfix expression: ");
fgets(postfix, MAX_SIZE, stdin);
postfix_to_infix(postfix, infix);
printf("The infix expression is: %s\n", infix);
return 0;
}
```
这段代码中,我们定义了一个结构体 Stack 作为栈,其中包含了栈的数组和栈顶的位置。我们实现了 push、pop 和 peek 操作来操作栈。is_operator 函数用来判断一个字符是否为运算符。postfix_to_infix 函数将后缀表达式转换为中缀表达式。在函数中,我们遍历后缀表达式的每个字符,如果是数字或字母,则直接输出;如果是运算符,则弹出两个操作数并加上运算符,然后加上括号输出。
在 main 函数中,我们输入一个后缀表达式并调用 postfix_to_infix 函数将其转换为中缀表达式,然后输出结果。
阅读全文