DS – Infix to Prefix Program

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