#include<stdio.h> #include<string.h> #define LP 10 #define RP 20 #define OPERATOR 30 #define OPERAND 40 #define LPP 0 #define AP 1 #define SP 1 #define MP 2 #define DP 2 #define REMP 2 #define NONE 9 char infix[50], stack[40], postfix[50]; int top; void InfixToPostfix(); int getType(char); int getPrecedence(char); void push(char); char pop(void); int main(){ char ch; do { top=-1; printf(“\nEnter an Infix expression : “); gets(infix); InfixToPostfix(); printf(“Posfix expression is : %s \n”, postfix); printf(“Do you want to convert one more(y/n) : “); ch = getche(); }while(ch==’y’); return 0; } void InfixToPostfix(){ int i, p, l, type, prec; char next; i=p=0; l=strlen(infix); while(i<l) { type = getType(infix[i]); switch(type){ case LP : push(infix[i]); break; case RP : while((next=pop()) != ‘(‘) { postfix[p] = next; ++p; } break; case OPERAND : postfix[p] = infix[i]; ++p; break; case OPERATOR : prec = getPrecedence(infix[i]); while((top>-1) && (prec<=getPrecedence(stack[top]))) { postfix[p] = pop(); ++p; } push(infix[i]); break; } ++i; } while(top > -1){ postfix[p] = pop(); ++p; } } int getType(char sym){ switch(sym){ case ‘(‘ : return LP; case ‘)’ : return RP; case ‘+’: case ‘-‘ : case ‘*’ : case ‘/’ : case ‘%’: return OPERATOR; default : return OPERAND; } } int getPrecedence(char sym){ switch(sym){ case ‘(‘ : return LPP; case ‘+’: return AP; case ‘-‘ : return SP; case ‘*’ : return MP; case ‘/’ : return DP; case ‘%’: return REMP; default : return NONE; } } void push(char sym){ ++top; stack[top] = sym; } char pop(void){ char sym; sym = stack[top]; –top; return sym; } |
