#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 150 FILE *fp,*fp1; main(){ int i,j,k,m,n,s_top,len,o_i; char stack[MAX]; char output[MAX]; int imp[MAX]; char sik[MAX]; fp=fopen("input.txt","r"); fp1=fopen("output.txt","w"); fscanf(fp,"%s",sic); len=strlen(sic); for(i=(int)'0';i<=(int)'9';i++) imp[i]=5; imp[(int)'(']=3; imp[(int)'<']=2; imp[(int)'>']=2; imp[(int)'%']=1; imp[(int)')']=0; for(i=0,s_top=-1,o_i=-1;i<len;i++){ if(imp[(int)sik[i]]==5) output[++o_i]=sik[i]; else{ switch(imp[(int)sik[i]]){ case 3: stack[++s_top]=sik[i]; break; case 2: if(imp[(int)stack[s_top]]>=imp[(int)sik[i]]){ while(imp[(int)stack[s_top]]>=imp[(int)sik[i]]) output[++o_i]=stack[s_top--]; } else stack[++s_top]=sik[i]; break; case 1: if(imp[(int)stack[s_top]]>=imp[(int)sik[i]]){ while(imp[(int)stack[s_top]]>=imp[(int)sik[i]]) output[++o_i]=stack[s_top--]; } else stack[++s_top]=sik[i]; break; fprintf(fp1,"Impossible\n"); fclose(fp); fclose(fp1); }
스택에의한RPN변환
2009. 7. 29. 21:12