1.中缀表达式转后缀表达式
void infixToPostFix(char exp[],char s2[],int &top2)
{
char s1[maxsize];int top1=-1;
int i=0;
while(exp[i]!='\0')
{
if(exp[i]>='0'&&exp[i]<='9')
{
s2[++top2]=exp[i];
i++;
}
else if(exp[i]=='(')
{
s1[++top1]='(';
i++;
}
else if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='\')
{
if(top1==-1||s1[top1]=='('||getPriority(exp[i])>getPriority(s1[i]))
{
s1[++top1]=exp[i];
i++;
}
else
{
s2[++top2]=s1[top1--];
}
}
else if(infix[i]==')')
{
while(s1[top1]!='(')
s2[++top2]=s1[top1--];
--top1;
++i;
while(top1!=-1)
s2[++top2]=s1[top1--];
}
}
}
2.中缀表达式转前缀表达式
void infixToPreFix(char infix[],int len,char s2[],int *&top2)
{
char s1[maxsize];int top1;
int i=len-1;
while(i>0)
{
if(exp[i]>='0'&&exp[i]<='9')
{
s2[++top2]=exp[i];i--;
}
else if(exp[i]==')')
{
s1[++top1]=')';i--;
}
else if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='\')
{
if(top1==-1||s1[top1]==')'||getPriority(infix[i])>=getPriority(s1[top1]))
{
s1[++top1]=infix[i];i--;
}
else
s2[++top2]=s1[top1--];
}
else if(infix[i]=='(')
{
while(infix[i]==')')
s2[++top2]=s1[top1--];
--top1;
--i;
}
}
while(top1!=-1)
s2[++top2]=s1[top1--];
}