代码实现后缀表达式转化
int judgePriority(char op1, char op2)
{
if (op1=='(' || op2 == '(')
return 0;
if ((op1=='-'||op1=='+') && (op2 =='*'||op2 =='/'))
return 0;
return 1;
}
void infix2postfix(char *tmp, char *str)
{
char *p = tmp;
int i, j, k;
char op1, op2;
j = 0;
for (i=0; p[i]; i++)
{
if (p[i] >= '0' && p[i] <= '9')
str[j++] = p[i];
else
{
op1 = getTop();
op2 = p[i];
if (isEmpty())
Push(op2);
else
{
if (op2 == ')')
{
while (getTop() != '(')
str[j++] = Pop();
Pop();
continue;
}
switch(judgePriority(op1, op2))
{
case 1: str[j++] = Pop();
for (k=0; k<=top; k++)
{
if (!judgePriority(op1, op2)) break;
str[j++] = Pop();
}
Push(op2);
break;
case 0: Push(op2); break;
}
}
}
}
while (!isEmpty())
str[j++] = Pop();
str[j] = 0;
}