## Best C Programming code for converting Infix Expression into Postfix Expression

#### Introduction

In Data Structure one of the most important topic is Stack. Using this concept we can perform conversion of Infix expression into Postfix expression.

**What is Infix Expression?**

In an equation or expression when operator is in between two operands, then this type of expression/equation is Infix Expression. e.g. (a+b), here as you can see ‘+’ operator is in between two operands ‘a’ and ‘b’.

**What is Postfix Expression?**

In an equation or expression when operators are just after operands, then this type of expression/equation is Postfix Expression. e.g. (ab+), here as you can see operator ‘+’ is after two operands ‘a’ and ‘b’.

In this code we will convert an Infix expression into Postfix expression. i.e. (a+b) is going to convert into (ab+). Please keep one important point in mind, in this code you can take single digit operand as input. i.e. (1+2)*(3+4)

Hope you will understand the code easily. If you are finding any difficulties please feel free to comment or send me email. My email id : creativeresource2020@gmail.com.

```
//Program code for converting Infix expression into Postfix expression
#include<stdio.h>
#define MAX 100
typedef struct stack
{
char data[MAX];
int top;
}stack;
int getpriority(char);
int isempty(stack *);
int isfull(stack *);
char pop(stack *);
void push(stack *,char);
char peek(stack *);
void intopost(char [],char []);
void main()
{
char str[50],str1[50];
printf("Enter the infix expression: ");
gets(str);
intopost(str,str1);
printf("Post fix expression is : ");
puts(str1);
}
// Following function is converting infix into postfix notation
void intopost(char str[],char str1[])
{
stack s;
char x;
int i,j;
s.top=-1;
i=j=0;
while(str[i]!='\0')
{
if(isalnum(str[i]))
str1[j++]=str[i];
else
if(str[i] == '(')
push(&s,'(');
else
{
if(str[i] == ')')
while((x=pop(&s))!='(')
str1[j++]=x;
else
{
while(getpriority(str[i])<=getpriority(peek(&s)) && !isempty(&s))
{
x=pop(&s);
str1[j++]=x;
}
push(&s,str[i]);
}
}
i++;
}
while(!isempty(&s))
{
x=pop(&s);
str1[j++]=x;
}
str1[j]='\0';
}
//following function is returning the priority of the operator
int getpriority(char x)
{
if(x == '(')
return(0);
if(x == '+' || x == '-')
return(1);
if(x == '*' || x == '/' || x == '%')
return(2);
return(3);
}
//following function checking whether the stack is empty or not
int isempty(stack *s)
{
if(s->top==-1)
return(1);
else
return(0);
}
//following function is checking whether the stack is full or not
int isfull(stack *s)
{
if(s->top==MAX-1)
return(1);
else
return(0);
}
//following function is inserting value into the stack
void push(stack *s,char x)
{
s->top=s->top+1;
s->data[s->top]=x;
}
//following function is extracting one value at a time from the stack
char pop(stack *s)
{
int x;
x=s->data[s->top];
s->top=s->top-1;
return(x);
}
//following function is returning the top most value in the stack
char peek(stack * s)
{
return(s->data[s->top]);
}
```