You are currently viewing Easy Infix to Postfix Conversion Code

Easy Infix to Postfix Conversion Code

This code is designed for converting an infix equation(expression) into postfix  equation(expression) means Infix to Postfix. In this code you have to pass an equation or expression in infix form as string (character array) format, the code will convert the infix expression into postfix expression. In this code precedence of the operator is also considered. This is the easiest way to implement infix to postfix conversion concept in C. For Such more codes click here and for video tutorial click here.

Code for implementing Infix to Postfix Conversion

#include<stdio.h>
#include<stdlib.h>
#define max 50
typedef struct stack
{
char ar[max];
int top;
}st;


void push(st *,char);
char pop(st *);
char peek(st);
int isfull(st);
int isempty(st);


void intopost(char [],char []);
int getpriority(char);
int main()
{
char expr[max],res[max];


printf("\nEnter the expression : ");
fgets(expr,max,stdin);


intopost(expr,res);
printf("\nThe postfix expression is : ");
puts(res);

}


void intopost(char expr[],char res[])
{
st s;
char ch;
int i,j;
s.top=-1;
for(i=0,j=0;expr[i]!='\0';i++)
{
if(expr[i]==' ')
continue;
else if(expr[i]=='(' || expr[i]=='{' || expr[i]=='[')
push(&s,expr[i]);
else if((expr[i]>=48 && expr[i]<=57) || (expr[i]>=65 && expr[i]<=90) || (expr[i]>=97 && expr[i]<=122))
res[j++]=expr[i];
else if(expr[i]=='+' || expr[i]=='-' || expr[i]=='*' || expr[i]=='/')
{
while(!isempty(s) && getpriority(expr[i])<=getpriority(peek(s)) && peek(s)!='(')
{
res[j++]=pop(&s);
}


push(&s,expr[i]);
}
else if(expr[i]==')' || expr[i]=='}' || expr[i]==']')
{
while(!isempty(s) && (ch=pop(&s))!='(')
{
res[j++]=ch;
}
}
else
{
break;
}
}
if(!isempty(s))
{
while(!isempty(s) && (ch=peek(s))!='(')
res[j++]=pop(&s);
}
res[j]='\0';
}


void push(st *s,char ch)
{
s->ar[++s->top]=ch;
}


char pop(st *s)
{
return s->ar[s->top--];
}


char peek(st s)
{
return s.ar[s.top];
}


int isempty(st s)
{
if(s.top==-1)
return 1;
else
return 0;
}


int isfull(st s)
{
if(s.top==max-1)
return 1;
else
return 0;
}


int getpriority(char ch)
{
switch(ch)
{
case '+':
case '-': return 0;
case '*':
case '/':return 1;
}
}

Leave a Reply