中缀转后缀



# infix [] -> 中缀表达式 ; s2[] -> 栈的顺序表 ; top2 -> 栈顶指针
void infixToPostFix(char infix[ ], char s2[ ], int &top2)
{
    char s1[maxSize];       #s1 辅助栈
    int top1 = -1;
    int i=0;
    while(infix[i] != '')
    {
        if('0' <= infix[i] && infix[i] <= '9')  
        {
            s2[++top2] = infix[i];   //入栈
            ++i;
        }
        else if(infix[i] == '(')
        {
            s1[++top1] = '(';
            ++i;
        }
        else if (infix[i] == '+' || infix[i] == '-' ||
                    infix[i] == '*' || infix[i] == '/')
        { 
            if(top1 == -1 || s1[top1] == '(' ||      #当栈顶为空
                getPriority(infix[i]) > getPriority(s1[top1]))      当前优先级 > 栈顶优先级
            {
                s1[++top1] = infix[i];
                ++i;
            }
            else
                s2[++top2] = s1[top1--];      #将运算符入栈到s2中
        }
        else if(infix[i] == ')')
        {
            while(s1[top1] != '(')      #当遇到右括号时
                s2[++top2] = s1[top1--];
            --top1;
            ++i;
        }
    }
    while(top1 != -1)
        s2[++top2] = s1[top--];
}


原文地址:https://www.cnblogs.com/dsbz/p/14426086.html