您的位置:首页 > 理论基础 > 数据结构算法

后缀表达式变换为中缀表达式

2013-04-06 08:59 246 查看
详细说明:将由数字和四则运算符组成的后缀表达式变换为中缀表达式。输入的后缀表达式包含的运算符不超过15个。要求转换后的中缀表达式中不应出现不必要的括号。例如,整个表达式两端的括号要省略,不影响原计算顺序的括号要省略。
后缀式转中缀式   
#include<stdio.h>   
#include<string.h>   
char str[50][1000],si[1000],t[1000];   
long gra[1000];   
int main(){   
    long l,sn,i,j,k;   
    gets(si);   
    l=strlen(si);   
    sn=0;   
    i=0;j=0;   
    while (j<l){   
          while ((j<l)&&(si[j]!=' '))   
                j++;   
          if ((j==i+1)&&(si[i]=='+')){   
             sn--;   
             if (gra[sn-1]<0){   
                strcpy(t,str[sn-1]);   
                strcpy(str[sn-1],"(");   
                strcat(str[sn-1],t);   
                strcat(str[sn-1],")");   
             }   
             strcat(str[sn-1],"+");   
             if ((gra[sn]==1)||(gra[sn]==2)||(gra[sn]<0)){   
                strcpy(t,str[sn]);   
                strcpy(str[sn],"(");   
                strcat(str[sn],t);   
                strcat(str[sn],")");   
             }   
             strcat(str[sn-1],str[sn]);   
             gra[sn-1]=1;   
             gra[sn]=0;   
          }   
          else if ((j==i+1)&&(si[i]=='-')){   
               sn--;   
               if (gra[sn-1]<0){   
                  strcpy(t,str[sn-1]);   
                  strcpy(str[sn-1],"(");   
                  strcat(str[sn-1],t);   
                  strcat(str[sn-1],")");   
               }   
               strcat(str[sn-1],"-");   
               if ((gra[sn]==1)||(gra[sn]==2)||(gra[sn]<0)){   
                  strcpy(t,str[sn]);   
                  strcpy(str[sn],"(");   
                  strcat(str[sn],t);   
                  strcat(str[sn],")");   
               }   
               strcat(str[sn-1],str[sn]);   
               gra[sn-1]=2;   
               gra[sn]=0;   
          }   
          else if ((j==i+1)&&(si[i]=='*')){   
               sn--;   
               if ((gra[sn-1]==1)||(gra[sn-1]==2)||(gra[sn-1]<0)){   
                  strcpy(t,str[sn-1]);   
                  strcpy(str[sn-1],"(");   
                  strcat(str[sn-1],t);   
                  strcat(str[sn-1],")");   
               }   
               strcat(str[sn-1],"*");   
               if (gra[sn]!=0){   
                  strcpy(t,str[sn]);   
                  strcpy(str[sn],"(");   
                  strcat(str[sn],t);   
                  strcat(str[sn],")");   
               }   
               strcat(str[sn-1],str[sn]);   
               gra[sn-1]=3;   
               gra[sn]=0;   
          }   
          else if ((j==i+1)&&(si[i]=='/')){   
               sn--;   
               if ((gra[sn-1]==1)||(gra[sn-1]==2)||(gra[sn-1]<0)){   
                  strcpy(t,str[sn-1]);   
                  strcpy(str[sn-1],"(");   
                  strcat(str[sn-1],t);   
                  strcat(str[sn-1],")");   
               }   
               strcat(str[sn-1],"/");   
               if (gra[sn]!=0){   
                  strcpy(t,str[sn]);   
                  strcpy(str[sn],"(");   
                  strcat(str[sn],t);   
                  strcat(str[sn],")");   
               }   
               strcat(str[sn-1],str[sn]);   
               gra[sn-1]=4;   
               gra[sn]=0;   
          }   
          else{   
               for (k=i;k<j;k++)   
                   str[sn][k-i]=si[k];   
               str[sn][j-i]='\0';   
               if (str[sn][0]=='-')   
                  gra[sn]=-1;   
               else   
                   gra[sn]=0;   
               sn++;   
          }   
          while ((j<l)&&(si[j]==' '))   
                j++;   
          i=j;j=i;   
    }   
    printf("%s\n",str[0]);   
    scanf("%ld",&sn);   
    return 0;   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构