#include #include #define max 50 char infix[max],postfix[max],s[max],elem; int i,j=0,top=-1; void push(char operator); char pop(); void convert(); int priority(char operator); int main() { printf("Enter infix expression\n"); scanf("%s",infix); convert(); return 0; } void push(char operator) { if(top==max-1) printf("STACK OVERFLOW\n"); else { top++; s[top]=operator; } } char pop() { if(top==-1) printf("STACK UNDERFLOW\n"); else return s[top--]; } int priority(char operator) { switch(operator) { case'^':return 3; case'*': case'/': case'%':return 2; case'+': case'-':return 1; case'(':return 0; case'#':return -1; default: printf("Invalid Operator\n"); } } void convert() { push('#'); for(i=0;infix[i]!='\0';i++) { switch(infix[i]) { case'(':push('('); break; case'^': case'*': case'/': case'%': case'+': case'-': while(priority(s[top])>=priority(infix[i])) { elem=pop(); postfix[j++]=elem; } push(infix[i]); break; case')':while((elem=pop())!='(') //check { postfix[j++]=elem; } break; default:if(isalnum(infix[i])) postfix[j++]=infix[i]; else printf("Invalid operand\n"); break; } } while((elem=pop()!='#')) { postfix[j++]=elem; postfix[j]='\0'; printf("Postfix expression=%s\n",postfix); } }