SDUT OJ 数据结构实验之栈与队列二:一般算术表达式转换成后缀式

数据结构实验之栈与队列二:一般算术表达式转换成后缀式

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic Discuss

Problem Description

对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

Input

输入一个算术表达式,以‘#’字符作为结束标志。

Output

输出该表达式转换所得到的后缀式。

Sample Input

a*b+(c-d/e)*f#

Sample Output

ab*cde/-f*+

Hint

Source

#include<stdio.h>
#include<string.h>
int st(char a)
{
    if(a=='+'||a=='-')return 1;
    else if(a=='/'||a=='*')return 2;
    else if(a=='(')return 3;
    else if(a==')')return 4;
    return 0;
}
int main()
{
   int  top=0;
   char s,b[1000000];
   while(scanf("%c",&s),s!='#')
   {
       if(s<='z'&&s>='a')
        printf("%c",s);
       else
       {
           if(top==0)
           {
               top++;
               b[top]=s;
           }
           else if(st(s)>st(b[top]))
           {
               if(st(s)==4)
               {
                   while(b[top]!='(')
                   {
                       printf("%c",b[top]);
                       top--;
                   }
                   top--;
               }
               else
               {
                   top++;
                   b[top]=s;
               }
           }
           else
           {
               if(b[top]=='(')
               {
                   top++;
                   b[top]=s;
               }
               else
               {
                   printf("%c",b[top]);
                   b[top]=s;
               }
           }
       }
   }
   while(top)
   {
       printf("%c",b[top]);
       top--;
   }
   printf("\n");
    return 0;
}

这道题做了两天,才弄明白,不懂的可以问我呀;

猜你喜欢

转载自blog.csdn.net/qq_41374539/article/details/81106691