中序式转后序式?(a+b)*(c+d)=>ab+cd+*

来源:互联网 发布:node v4.5.0 x64.msi 编辑:程序博客网 时间:2024/06/09 20:52
#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;}

中序转前序亦然!
0 0
原创粉丝点击