假设表达式由单字母变量和双目四则运算算符构成.写一算法,将以正确的式子转换为逆波兰式
假设表达式由单字母变量和双目四则运算算符构成.写一算法,将以正确的式子转换为逆波兰式
char *RPExpression(char *e)
/* 返回表达式e的逆波兰式 */
{
char m='0';
char *b;
Stack s;
static char a[100];
b=a;
InitStack(s);
Push(s,m);
if(*e)
{
while(*e)
{
switch(*e)
{
case '(' :
{
Push(s,*e);
break;
}
case '+' :
case '-' :
{
m=Top(s);
if(m=='+'||m=='-')
{
Pop(s,m);
*b++=m;
}
else if(m=='*'||m=='/')
{
Pop(s,m);
while(m!='('&&m!='0')
{
*b++=m;
Pop(s,m);
}
[u] if(m=='('||m=='0')
Push(s,m); [/u]
}
Push(s,*e);
break;
}
case '*' :
case '/' :
{
m=Top(s);
if(m=='('||m=='+'||m=='-'||m=='0')
{
Push(s,*e);
}
else if(m=='*'||m=='/')
{
Pop(s,m);
*b++=m;
if(m=='('||m=='0')
Push(s,m);
Push(s,*e);
}
break;
}
case ')' :
{
Pop(s,m);
while(m!='(')
{
*b++=m;
Pop(s,m);
}
break;
}
default :
{
*b++=*e;
break;
}
}
e++;
}
Pop(s,m);
while(m!='0')
{
*b++=m;
Pop(s,m);
}
*b='\0';
b=a;
return b;
}
}