Code:
//Infix to postfix conversion
#include <iostream>
#include <cstring>
#define max 20
using namespace std;
int tonum(char x)
{
if (x=='*')
return 4;
else if(x=='/')
return 3;
else if(x=='+')
return 2;
else
return 1;
}
int preced(char x,char y)
{
int temp1=tonum(x);
int temp2=tonum(y);
if(temp1>=temp2)
return 1;
else
return 0;
}
int isopn(char x)
{
int y=x;
if(y<=57 && y>=48)
return 1;
else
return 0;
}
class conv
{
char stack[max];
int i,j;
public:
conv()
{
i=-1;
j=0;
}
void push(char x);
char pop();
int isempty();
};
void conv::push(char x)
{
if(i==max-1)
cout<<"\nStack Overflow: ";
else
stack[++i]=x;
}
char conv::pop()
{
return stack[i--];
}
int conv::isempty()
{
if(i<0)
return 1;
else
return 0;
}
int main()
{
conv c;
char out[max];
char input[max];
int i,j=0,len;
char var,current;
clrscr();
cout<<"\nEnter the input Expression: ";
cin>>input;
clrscr();
cout<<"\nInfix Expression: "<<input;
len=strlen(input);
//cout<<"\nlength="<<len;
for(i=0,j=0;i<=len;i++)
{
var=input[i];
if(isopn(var)==1)
{
out[j++]=var;
}
else if(var=='*')
{
if(c.isempty()==1)
{
c.push(var);
}
else
{
current=c.pop();
if(preced(current,var)==0)
c.push(var);
else
out[j++]=c.pop();
}
}
else if(var=='/')
{
if(c.isempty()==1)
{
c.push(var);
}
else
{
current=c.pop();
if(preced(current,var)==0)
c.push(var);
else
out[j++]=c.pop();
}
}
else if(var=='+')
{
if(c.isempty()==1)
{
c.push(var);
}
else
{
current=c.pop();
if(preced(current,var)==0)
c.push(var);
else
out[j++]=c.pop();
}
}
else if(var=='-')
{
if(c.isempty()==1)
{
c.push(var);
}
else
{
current=c.pop();
if(preced(current,var)==0)
c.push(var);
else
out[j++]=c.pop();
}
}
}
cout<<"\nEquivalent Postfix conversion is: ";
cout<<out;
system("pause");
return 0;
}