中缀表达式转换为后缀表达式代码c++
时间: 2023-10-04 16:01:48 浏览: 187
中缀表达式转换为后缀表达式是一种常用的算法问题,下面是一个用C语言实现的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义栈结构及相关操作
typedef struct Stack {
char data[100]; // 假设栈存储的元素为字符类型,最大容量为100
int top; // 栈顶指针
} Stack;
// 初始化栈
void initStack(Stack *stack) {
stack->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *stack) {
return stack->top == -1 ? 1 : 0;
}
// 入栈
void push(Stack *stack, char c) {
stack->data[++(stack->top)] = c;
}
// 出栈
char pop(Stack *stack) {
return stack->data[(stack->top)--];
}
// 获取栈顶元素
char getTop(Stack *stack) {
return stack->data[stack->top];
}
// 判断运算符的优先级
int priority(char c) {
switch (c) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
// 中缀表达式转后缀表达式
void infixToPostfix(char *infix, char *postfix) {
Stack stack; // 定义栈
initStack(&stack); // 初始化栈
int i = 0, j = 0;
int length = strlen(infix);
for (i = 0; i < length; i++) {
char c = infix[i];
if (c >= '0' && c <= '9') { // 如果字符是数字,直接加入后缀表达式
postfix[j++] = c;
} else if (c == '(') { // 如果字符是左括号,入栈
push(&stack, c);
} else if (c == ')') { // 如果字符是右括号,将栈中的运算符弹出,直到遇到左括号
while (!isEmpty(&stack) && getTop(&stack) != '(') {
postfix[j++] = pop(&stack);
}
if (!isEmpty(&stack) && getTop(&stack) == '(') {
pop(&stack); // 弹出左括号
}
} else { // 如果字符是运算符
while (!isEmpty(&stack) && priority(getTop(&stack)) >= priority(c)) {
postfix[j++] = pop(&stack); // 当前运算符优先级小于等于栈顶运算符优先级时,将栈顶运算符弹出
}
push(&stack, c); // 将当前运算符入栈
}
}
// 将栈中剩余运算符弹出
while (!isEmpty(&stack)) {
postfix[j++] = pop(&stack);
}
postfix[j] = '\0'; // 结尾添加字符串结束符
}
int main() {
char infix[100]; // 存储中缀表达式
char postfix[100]; // 存储后缀表达式
printf("请输入中缀表达式:");
scanf("%s", infix);
infixToPostfix(infix, postfix);
printf("后缀表达式为:%s\n", postfix);
return 0;
}
```
以上是一个简单的中缀表达式转后缀表达式的代码示例,通过定义栈结构及相关操作,实现了中缀表达式转换为后缀表达式的功能。输入一个中缀表达式,程序将输出对应的后缀表达式。这段代码可以覆盖简单的表达式,对于复杂的表达式可能需要进行扩展。
阅读全文