HOME
/*..PROGRAM
FOR CONVERSION OF THE INFIX
EXPRESSION INTO POSTFIX
EXPRESSION..*/
#include<iostream.h>
#include<ctype.h>
#include<math.h>
#include<string.h>
int
j,q,m=0;
char
a,b=NULL;
class
postfix //CLASS
DECLARATION
{
private:
char data,*expr,R[22];
postfix *next;
public:
void evaluate(char *);
void push(char);
char pop();
void show(int);
int priority(char);
}
*top ;
//FUNCTION
FOR EXPRESSION CONVERSION
void
postfix::evaluate(char *c)
{
expr=c;
for(int i=0,j=-1;expr[i]!=”;i++)
{
if( isdigit(expr[i])||isalpha(expr[i]) )
{
R[++j]=expr[i];
}
else
{
if(top!=NULL)
{
b=pop();
push(b);
}
if(expr[i]==’)')
push(expr[i]);
else
if(expr[i]==’(‘)
{
R[++j]=pop();
m++;
}
else if(expr[i]==’(‘)
push(expr[i]);
else
{
int n1=priority(b);
int n2=priority(expr[i]);
if(n1<=n2)
push(expr[i]);
else
{
R[++j]=pop();
push(expr[i]);
}
}
}
}
while(top!=NULL)
R[++j]=pop();
}
char
postfix::pop()//FUNCTION
FOR POPPING
{
char x=NULL;
postfix *temp;
temp=top;
x=temp->data;
if(top==NULL)
return(’0′);
else
{
top=temp->next;
delete temp;
}
return(x);
}
//FUNCTION
FOR CHECKING PRIORITY
int
postfix::priority(char y)
{
if(y==’$')
return(3);
if(y==’*'||y==’/')
return(2);
if(y==’+'||y==’-')
return(1);
else
return(0);
}
//FUNCTION
FOR PUSHING ELEMENTS
void
postfix::push(char ch)
{
postfix *n,*temp;
n=new(postfix);
n->data=ch;
n->next=NULL;
if(top==NULL)
top=n;
else
{
temp=top;
n->next=temp;
top=n;
}
}
//FUNCTION
FOR DISLAYING OUTPUT
void
postfix::show(int q)
{
for(int i=0;i<q-m;i++)
{
if(R[i]==’(‘||R[i]==’)');
else
cout<<R[i];
}
}
void
main()//MAIN()
FUNCTION STARTS
{
char s[22];
top=NULL;
postfix k;//OBJECT
CREATION
cout<<”enter the INFIX expresion”;
cin>>s;
int q=strlen(s);
k.evaluate(s);
cout<<”THE POSTFIX EXPRESION IS –>”;
k.show(q);
}//END OF MAIN()
//END
OF PROGRAM
/*
OUTPUT:
enter
the INFIX expresiona$b*c-d+e/f/(g+h)
THE
POSTFIX EXPRESION IS –>ab$c*d-ef/gh+/+
Press
any key to continue
*/
HOME