#include<stdio.h>
#include<stdlib.h>
int postfix(char *);//
int priovity(char);//
int main(void){
char input[100];
printf("输入中序运算式:");
scanf("%s",input);
postfix(input);
return 0;
}
//后序化函数
int postfix(char *index){
int i=0;
int top=0;//指向stack的游标
char stack[100]={'/0'};//存放括号和运算符的栈
char op;
while(1){
op=infix[i];
switch(op){
//op到最后时,输出stack中的字符
case '/0':
while(top>0){
printf("%c",stack[top]);
top--;
}
return 0;
//遇(时,op放入stack中
case '(':
if(top<sizeof(stack)/sizeof(char)){
top++;
stack[top]=op;
}
break;
//遇+-*/时
case '+':
case '-':
case '*':
case '/':
//比较优先级,并输出级别高的
while(priovity(stack[top])>=priovity(op)){
printf("%c",stack[top]);
top--;
}
//存放级别低的
if(top<sizeof(stack)sizeof(char)){
top++;
stack[top]=op;
}
break;
//遇)时,把stack中的top指向的运算符输出,并把(退掉
case ')':
while(stack[top]!='('){
printf("%c",stack[top]);
top--;
}
top--;
break;
//输出运算元
default:
printf("%c",op);
break;
}
i++;
}
}
//判断优先级函数
int priovity(char op){
int p;
switch(){
case '+':
case '-':
p=1;
break;
case '*':
case '/':
p=1;
break;
default:
p=0;
break;
}
return p;
}
中序转前序亦然!