سفارش تبلیغ
صبا ویژن
تبدیل میانوند به پسوند در سی (شنبه 85/8/20 ساعت 7:35 عصر)
#include <stdio.h>
#include <conio.h>
#define max 100
/*******************************GLOBAL VARIABLES*******************************/
 typedef enum {lparen,rparen,minus,plus,times,div,mod,eos,operand} precedence;
 char expr[]={"a/b-c+(d*e)-a*c"};
 int isp[]={0,19,12,12,13,13,13,0};
 int icp[]={20,19,12,12,13,13,13,0};
 precedence stack[max];

 main()
 {
 /*-----------------------PORTOTYPE&DECLARTION--------------------------------*/
   void addS(int *top,int item) ;
  int delS(int *top);
  void print_token(precedence token);
  precedence get_token(char *simbol,int *n);
   precedence token;
   char simbol;
   int n=0,tops=0,i;
   stack[0]=0;
/*-----------------------------START------------------------------------------*/
   while((token=get_token(&simbol,&n))!=eos)
    {
       if(token==operand)
        printf("%c",simbol);
       else if(token==rparen)
        {
         while(stack[tops]!=lparen)
          print_token(delS(&tops));
         delS(&tops);
        }
       else
        {
         while(icp[token]<=isp[stack[tops]])
          print_token(delS(&tops));
         addS(&tops,token);
        }
      }//END OF WHILE
   while(token!=0)
    {
     print_token(token);
     token=delS(&tops);
    }
  getch();
 }
 /*-------------------------------STACK_FULL----------------------------------*/
 void stack_full(void)
 {
  puts("\n");
  printf("stack over flow");
 // halt;
 }
 /*------------------------------STACK_EMPTY----------------------------------*/
  void stack_empty(void)
  {
   puts("\n");
   printf("stack is empty");
 //  halt;
  }
 /*-----------------------------ADD TO STACK----------------------------------*/
  void addS(int *tops,int item)
  {
   if(*tops==max-1)
    stack_full();
   else
    stack[++*tops]=item;
 }
 /*----------------------------DELETE FROM STACK------------------------------*/
  int delS(int *tops)
   {
    if(*tops==-1)
     stack_empty();
    return(stack[(*tops)--]);
   }
 /*-------------------------GET CHAR FROM EXPERSION----------------------------*/
precedence get_token(char *simbol,int *n)
 {
  *simbol=expr[(*n)++];
  switch(*simbol)
   {
   case "(" :return lparen;
   case ")" :return rparen;
    case "+" :return plus;
    case "*" :return times;
    case "-" :return minus;
    case "/" :return div;
    case "%" :return mod;
    case "\0":return eos;
    default  :return operand;
   }
 }
 /*------------------------PRINT ENUM DATA------------------------------------*/
 void print_token(precedence token)
 {
  switch (token)
   {
    case lparen : printf("(");break;
    case rparen : printf(")"); break;
    case minus  : printf("-");break;
  case plus   : printf("+"); break;
  case div    : printf("/"); break;
  case mod    : printf("%"); break;
  case times  : printf("*"); break;
   }
 }




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