您的位置:首页 > 其它

中缀表达式转后缀表达式

2013-02-25 13:43 162 查看
void InFixToPostFix(char* aSource)
{

if (!aSource)
{

return;
}

int len =
(int)strlen(aSource);

char *a =
aSource;//"1+2*3+(4*5+6)*7";

STACKOpinit(len);

for (int i =
0;i < len;++i)
{

if (a[i] == '(')
{

STACKOppush(a[i]);
}

if (a[i] == ')')
{

char operator = STACKOppop();

while (operator !=
'(')
{

printf("%c",operator);
operator =
STACKOppop();
}

continue;
}

else if (a[i] ==
'+'||a[i]=='*')
{

Grade grade = None;

if (a[i] == '+')
{
grade =
AddAndMinus;
}

else if (a[i] ==
'*')
{
grade =
MulitAndDiv;
}

Grade gradeStack =
None;

Operator operator;

do {
operator =
STACKOpView();

if ((operator == '\0')||(operator ==
'('))
{
gradeStack =
None;
}

if (operator == '+')
{
gradeStack =
AddAndMinus;
}

else if (operator ==
'*')
{
gradeStack =
MulitAndDiv;
}

if (grade <= gradeStack)
{

printf("%c",STACKOppop());
}

}
while ((grade <= gradeStack)&&(gradeStack !=
None));

STACKOppush(a[i]);

}

if ((a[i] >= '0')&&(a[i] <=
'9'))
{

printf("%c",a[i]);
}
}

printf("%c",STACKOppop());

printf("%c",STACKOppop());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: