DS – Infix to Postfix Program

#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;
}

Scroll to Top