Wednesday, May 6, 2009

PROGRAM TO CONVERT INFIX EXPRESSION TO POSTFIX EXPRESSION

/* THIS IS A PROGRAM TO CONVERT INFIX EXPRESSION TO POSTFIX EXPRESSION */

#include
#include
#include
#include
int top=-1;
char s[20];

void push(char c) // STARTING OF PUSH
{
top++;
s[top]=c;
} // END OF PUSH FUNCTION
void pop(char c) //STARTING OF POP
{
if(c==')')
{
while(s[top]!='(')
{
printf("%c",s[top]);
top--;
}
}
else
{ if(s[top]=='(')
top--;
else
{
printf("%c",s[top]);
top--;
}
}
} // END OF POP FUNCTION
void priority(char c) // FUNCTION TO CHECK PRIORITY
{
int l=change1(c); // THE CHARACTER THAT IS INCOMMING
int m=change1(s[top]);
if(top==-1)
push(c);
else
{
if(l>m)
push(c);
else
{
if(m==4)
push(c);
else
{
pop(s[top]);
push(c);
}
}
}
} // END OF PRIORITY FUNCTION

int change1(char c) // FUNCTION TO CHANGE CHARACTERS TO NUMERICALS
{
int a;
a=(c=='('?4:c=='^'?3:c=='*'?2:c=='/'?2:c=='+'?1:c=='-'?1:-1);
return a;
}
int change2(char c) // ANOTHER FUNCTION TO CHANGE CHARACTERS TO NUMERICALS
{
int a;
if(c=='(')
a=0;
else
{
if(c==')')
a=2;
else a=1;
}
return a;
}
void main() // STARTING OF MAIN
{
char exp[20];
int i=0,j;
clrscr();
printf("Enter an infix expression\n");
// getc(exp);
scanf("%s",&exp);
printf("The postfix expression for %s is ",exp);
while(exp[i]!='\0')
{
if(isalpha(exp[i]))
printf("%c",exp[i]);
else
{
j=change2(exp[i]);
switch(j)
{
case 0:push(exp[i]);
break;
case 2:pop(exp[i]);
break;
case 1:priority(exp[i]);
break;
}
}
i++;
}
if(exp[i]=='\0')
{
while(top!=-1)
pop(s[top]);
}
getch();
} // END OF MAIN

No comments:

Post a Comment