#include
#include
#include
#define MAX 20
void push(char c);
void pop();
int precedence(char o);
struct stack
{
char posfix[MAX];
char op[MAX];
int top,n;
};
struct stack s;
main()
{
s.top=-1;
s.n=0;
int i,j,k,l,e,f,r;
char exp[20];
printf("\n\nenter the expression : ");
scanf("%s",exp);
for(i=0;exp[i]!='\0';i++)
{
if(exp[i]=='(')
{
push(exp[i]);
}
else if(exp[i]==')')
{
while(s.op[s.top]!='(')
{
pop();
}
s.top--; // becoz leave the '('
}
else if(isalpha(exp[i])||isdigit(exp[i]))
{
s.posfix[s.n]=exp[i];
s.n++;
}
else
{
if(s.top==-1)
{
push(exp[i]);
}
else
{
e=precedence(exp[i]);
r=precedence(s.op[s.top]);
if(r>e)
{
pop();
push(exp[i]);
}
else if(r==e)
{
pop();
push(exp[i]);
}
else
{
push(exp[i]);
}
}
}
}
for(j=s.top;j>=0;j--)
{
pop();
}
printf("\nthe postfix string is : ");
printf("%s\n\n",s.posfix);
}
void push(char c)
{
s.op[++s.top]=c;
return;
}
void pop()
{
s.posfix[s.n++]=s.op[s.top--];
return;
}
int precedence(char o)
{
if(o=='*'||o=='/'||o=='%')
{
return 2;
}
else if(o=='+'||o=='-')
{
return 1;
}
else if(o=='(' || o==')')
return 0;
}