Advertisement
coffeebeforecode

Untitled

Jun 10th, 2021
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. #define MAX 10
  6. #define EMPTY -1
  7.  
  8. struct stack
  9. {
  10.     char data[MAX];
  11.     int top;
  12. };
  13.  
  14. int isempty(struct stack *s)
  15. {
  16.     return (s->top == EMPTY) ? 1 : 0;
  17. }
  18.  
  19. void emptystack(struct stack* s)
  20. {
  21.     s->top=EMPTY;
  22. }
  23.  
  24. void push(struct stack* s,int item)
  25. {
  26.     if(s->top == (MAX-1))
  27.     {
  28.         printf("\nSTACK FULL");
  29.     }
  30.     else
  31.     {
  32.         ++s->top;
  33.         s->data[s->top]=item;
  34.     }
  35. }
  36.  
  37. char pop(struct stack* s)
  38. {
  39.     char ret=(char)EMPTY;
  40.     if(!isempty(s))
  41.     {
  42.         ret= s->data[s->top];
  43.         --s->top;
  44.     }
  45.     return ret;
  46. }
  47.  
  48. void display(struct stack s)
  49. {
  50.     while(s.top != EMPTY)
  51.     {
  52.         printf("\n%d",s.data[s.top]);
  53.         s.top--;
  54.     }
  55. }
  56.  
  57. int isoperator(char e)
  58. {
  59.     if(e == '+' || e == '-' || e == '*' || e == '/' || e == '%')
  60.         return 1;
  61.     else
  62.         return 0;
  63. }
  64.  
  65.  
  66. int priority(char e)
  67. {
  68.     int pri = 0;
  69.  
  70.     if(e == '*' || e == '/' || e =='%')
  71.         pri = 2;
  72.     else
  73.     {
  74.         if(e == '+' || e == '-')
  75.             pri = 1;
  76.     }
  77.     return pri;
  78. }
  79.  
  80. void infix2postfix(char* infix, char * postfix, int insertspace)
  81. {
  82.     char *i,*p;
  83.     struct stack X;
  84.     char n1;
  85.     emptystack(&X);
  86.     i = &infix[0];
  87.     p = &postfix[0];
  88.  
  89.     while(*i)
  90.     {
  91.         while(*i == ' ' || *i == '\t')
  92.         {
  93.             i++;
  94.         }
  95.  
  96.         if( isdigit(*i) || isalpha(*i) )
  97.         {
  98.             while( isdigit(*i) || isalpha(*i))
  99.             {
  100.                 *p = *i;
  101.                 p++;
  102.                 i++;
  103.             }
  104.             /*SPACE CODE*/
  105.             if(insertspace)
  106.             {
  107.                 *p = ' ';
  108.                 p++;
  109.             }
  110.             /*END SPACE CODE*/
  111.         }
  112.  
  113.         if( *i == '(' )
  114.         {
  115.             push(&X,*i);
  116.             i++;
  117.         }
  118.  
  119.         if( *i == ')')
  120.         {
  121.             n1 = pop(&X);
  122.             while( n1 != '(' )
  123.             {
  124.                 *p = n1;
  125.                 p++;
  126.                 /*SPACE CODE*/
  127.                 if(insertspace)
  128.                 {
  129.                     *p = ' ';
  130.                     p++;
  131.                 }
  132.                 /*END SPACE CODE*/
  133.                 n1 = pop(&X);
  134.             }
  135.             i++;
  136.         }
  137.  
  138.         if( isoperator(*i) )
  139.         {
  140.             if(isempty(&X))
  141.                 push(&X,*i);
  142.             else
  143.             {
  144.                 n1 = pop(&X);
  145.                 while(priority(n1) >= priority(*i))
  146.                 {
  147.                     *p = n1;
  148.                     p++;
  149.                     /*SPACE CODE*/
  150.                     if(insertspace)
  151.                     {
  152.                         *p = ' ';
  153.                         p++;
  154.                     }
  155.                     /*END SPACE CODE*/
  156.                     n1 = pop(&X);
  157.                 }
  158.                 push(&X,n1);
  159.                 push(&X,*i);
  160.             }
  161.             i++;
  162.         }
  163.     }
  164.     while(!isempty(&X))
  165.     {
  166.         n1 = pop(&X);
  167.         *p = n1;
  168.         p++;
  169.         /*SPACE CODE*/
  170.         if(insertspace)
  171.         {
  172.             *p = ' ';
  173.             p++;
  174.         }
  175.         /*END SPACE CODE*/
  176.     }
  177.     *p = '\0';
  178. }
  179.  
  180. int main()
  181. {
  182.     char in[50] = { 0 },post[50] = { 0 };
  183.  
  184.     iprintf("Enter Infix Exp<b></b>ression : ");
  185.    
  186.     fgets(in, sizeof(in), stdin);
  187.         in[strlen(in) - 1] = '\0';
  188.     infix2postfix(&in[0],&post[0],1);
  189.     printf("Postfix Exp<b></b>ression is : %s\n",&post[0]);
  190.  
  191.     return 0;
  192. }
  193. /* SAMPLE OUTPUT:
  194. Enter Infix Exp<b></b>ression : A + B + C / (E - F)
  195. Postfix Exp<b></b>ression is : A B + C E F - / +  
  196. */
  197.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement