static Operator **op;
int Total;
static int NTotal;
void STACKOpinit(int maxN)
{
op = malloc(maxN*sizeof(Operator*));
for (int i = 0;i < maxN;i++)
{
op[i] = malloc(maxN*sizeof(Operator));
memset(op[i],0,maxN*sizeof(Operator));
}
NTotal = maxN;
Total = 0;
}
int STACKOpempty()
{
return Total==0;
}
void STACKOppush(Operator* operator)
{
if (Total < 0)
{
Total = 0;
}
memset(op[Total],0,NTotal*sizeof(Operator));
memcpy(op[Total++], operator, strlen(operator));
}
Operator* STACKOppop()
{
return op[--Total];
}
Operator* STACKOpView()
{
if (Total-1 < 0)
{
return '\0';
}
return op[Total-1];
}
void PostFixToInFix(char* aSource)
{
if (!aSource)
{
return;
}
int len =16;//(int)strlen(aSource);
char a[] ="123*+45*6+()7*+";
Operator source[16] ="\0";
Operator dest[16] ="\0";
Operator* Brackets =malloc(sizeof(Operator)*len);
STACKOpinit(len);
for (int i =0;i < len;++i)
{
if ((a[i] >='0')&&(a[i] <='9'))
{
char temp[2] ="\0";
temp[0] = a[i];
STACKOppush(temp);
}
switch (a[i])
{
case'+':
{
memset(source,0,16);
memset(dest,0,16);
strcpy(source,STACKOppop());
strcpy(dest,STACKOppop());
strcat(dest,"+");
strcat(dest, source);
STACKOppush(dest);
break;
}
case'*':
{
memset(source,0,16);
memset(dest,0,16);
strcpy(source,STACKOppop());
strcpy(dest,STACKOppop());
strcat(dest,"*");
strcat(dest, source);
STACKOppush(dest);
break;
}
case'(':
{
memset(dest,0,16);
memset(Brackets,0, len*sizeof(Operator));
strcpy(dest,STACKOppop());
memcpy(Brackets,"(",1);
strcat(Brackets, dest);
STACKOppush(Brackets);
break;
}
case')':
{
memset(dest,0,16);
strcpy(dest,STACKOppop());
strcat(dest,")");
STACKOppush(dest);
break;
}
default:
break;
}
}
printf("%s",STACKOppop());
free(Brackets);
Brackets =NULL;
}//栈使用的二维数组实现的。