#include
#include
#define operand(x)(x>='a'&&x<='z' || x>='A'&&x<'Z' || x<'0'&&x<='9')
char infix[30],prefix[30],stack[30];
int top,i=0;
void init()
{
top=-1;
}
void push(char x)
{
stack[++top]=x;
}
char pop()
{
return(stack[top--]);
}
int isp(char x)
{
int y;
y=(x=='('?6:x=='^'?4:x=='*'?2:x=='/'?1:x=='-'?1:x==')'?0:-1);
return y;
}
int icp(char x)
{
int y;
y=(x=='('?6:x=='^'?4:x=='*'?2:x=='/'?1:x=='-'?1:x==')'?4:-1);
return y;
}
void infixtoprefix()
{
int j,l=0;
char x,y;
stack[++top]='\0';
for (j=strlen(infix)-1;j>=0;j--)
{
x=infix[j];
if (operand(x))
prefix[l++]=x;
else
if(x=='(')
while((y=pop())!=')')
prefix[l++]=y;
else
{
while(isp(stack[top])>=icp(x))
prefix[l++]=pop();
push(x);
}
}
while(top>=0)
prefix[l++]=pop();
}
void main()
{
init();
printf("enter the infix expression :\n");
scanf("%s",infix);
infixtoprefix();
strrev(prefix);
printf("The resulting prefix expression is %s",prefix);
getch();
}
No comments:
Post a Comment