سفارش تبلیغ
صبا ویژن
change infix 2 postfix (شنبه 85/8/20 ساعت 8:31 عصر)

#include <stdio.h>
#include <conio.h>
#define max 100
typedef enum {lpar,rpar,min,pul,mul,div,mod,eos,operand} pre;
char expr[]={"a/b-c+d*e-a*c"};
int val[]={0,19,12,12,13,13,13,0};
pre  stack[max];

 int addQ(int *top,int item) ;
 int delQ(int *top);
 void print_token(pre token);
 pre get_token(char *simbol,int *n);
 /************************************************************/
 main()
 {
     pre token;
     char simbol;
     int n=0,tops=0,i;
     stack[0]=eos;

   for(i=0,token=get_token(&simbol,&n);i<14;++i,token=get_token(&simbol,&n))
    {
       if(token==operand)
       printf("%c",simbol);
       else
      if(val[token]>val[stack[tops]])
        addQ(&tops,token);
      else
      {
         while(tops!=0)
         print_token(delQ(&tops));
         addQ(&tops,token);
         }


      } //end for

  getch();
 }
 /*******************************************************/
 int addQ(int *tops,int item)
 {
 if(*tops==max-1)
 return(125);
 else
 stack[++*tops]=item;
 }
 /*****************************************************/
 int delQ(int *tops)
 {
 if(*tops==-1)
 return(126);
 return(stack[(*tops)--]);
 }
 /*********************************************/
pre get_token(char *simbol,int *n)
 {
 *simbol=expr[(*n)++];
 switch(*simbol)
   {
   case "(":return lpar;
   case ")":return rpar;
    case "+":return pul;
    case "*":return mul;
    case "-":return min;
    case "/":return div;
    case "%":return mod;
    case "\0":return eos;
    default :return operand;
   }
 }
 /***************************************************/
 void print_token(pre token)
 {
 switch (token)
  {
   case lpar:printf("(");break;
   case rpar:printf(")"); break;
   case min:printf("-");break;
 case pul:printf("+"); break;
 case div:printf("/"); break;
 case mod:printf("%"); break;
 case mul:printf("*"); break;
  }
 }





 
  • بازدیدهای این وبلاگ ?
  • امروز: 1 بازدید
    بازدید دیروز: 0
    کل بازدیدها: 1841 بازدید
  • درباره من
  • اشتراک در خبرنامه
  •