中缀转后缀

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<stack>
using namespace std;
int first(char b)
{
    if(b=='(') return 0;
    else if(b=='+'||b=='-') return 1;
    else if(b=='*'||b=='/') return 2;
}
int main()
{
    int k;
    char a[200];
    scanf("%d",&k);
    getchar();
    while(k--)
    {
        gets(a);
        stack<char>s;
        for(int i=0; i<strlen(a); i++)
        {
            if(a[i]>='0'&&a[i]<='9') printf("%c ",a[i]);
            else if(a[i]=='(') s.push(a[i]);
            else if(a[i]==')')
            {
                while(s.top()!='(')
                {
                    printf("%c ",s.top());
                    s.pop();
                }
                s.pop();
            }
            else if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/')
            {
                if(!s.empty())
                {
                    while(!s.empty()&&first(a[i])<=first(s.top()))
                    {
                        printf("%c ",a[i]);
                        s.pop();
                    }
                }
                s.push(a[i]);
            }
        }
        while(!s.empty())
        {
            printf("%c ",s.top());
            s.pop();
        }
        printf("\n");
    }
    return 0;
}

引用文章地址:

http://cc.siso.edu.cn/ds/16.html

  • -


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页