后缀表达式转中缀表达式

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;

}//栈使用的二维数组实现的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值