Tuesday, October 7, 2008

Infix to Postfix

/*convert infix expression to postfix expression using stack*/

#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;
}

No comments: