title: infix to postfix conversion for exponentiation operation
body: <p>I am learning polish notation and i tried a program for infix to postfix conversion.</p>
  
  <p>My program executed in a fine manner for operators like + and - . But for exponentiation operation which is right associative its not working correctly.</p>
  
  <p>For eg:  The expression A^B^C should be converted to ABC^^ , while the algorithm i used it is converting it into AB^C^.</p>
  
  <p>The Algorithm used is:</p>
  
  <pre><code>Define a stack array.
  Scan each character in the infix string
  If it is between 0 to 9, append it to postfix string.
  If it is left parenthesis push to stack
  If it is operator *,+,-,/,%,^ then 
            If the stack is empty push it to the stack
            If the stack is not empty then start a loop:
                               If the top of the stack has higher precedence
                               Then pop and append to output string
                               Else break
                       Push to the stack
  
  If it is right parenthesis then
              While stack not empty and top not equal to left brace
              Pop from stack and append to output string
              Finally pop out the left brace.
  
  If there is any input in the stack pop and append to the Postfix string.
  </code></pre>
  
  <p>What changes should i make in the algorithm so that it works for right associative operators too.?.</p>
  
  <p>My code is :</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;stdlib.h&gt;
  #include&lt;string.h&gt;
  # define MAX 100
  int top=-1;
  char infix[100],postfix[100];
  char stack[100];
  int priority(char symbol)
  {
      switch(symbol)
      {
          case '(':return 0;
          case '+':
          case '-':
                   return 1;
          case '/':
          case '*':
          case '%':
                   return 2;
          case '^':
                   return 3;
          default :return 0;
      }
  }
  void push(char symbol)
  {
      if(top==MAX-1)
      {
          printf("Stack overflow:\n");
          exit(1);
      }
      top=top+1;
      stack[top]=symbol;
  }
  char pop()
  {
      if(top==-1)
      {
          printf("Stack underflow:\n");
          exit(1);
      }
      return stack[top--];
  }
  void infix_to_postfix()
  {
      int i,p=0;
      char symbol,next;
      for(i=0;i&lt;strlen(infix);i++)
      {
          symbol=infix[i];
  
              switch(symbol)
              {
                  case '(':push(symbol);
                           break;
                  case ')':while((next=pop())!='(') 
                           {
                              postfix[p]=next;
                              p++;
                           }
                           break;
                  case '+':
                  case '-':
                  case '*':
                  case '/':
                  case '%':
                  case '^':
                  while(top!=-1 &amp;&amp; priority(stack[top])&gt;=priority(symbol))
                  {//or stack is empty
                      postfix[p]=pop();
                      p++;
                  }
                  push(symbol);
                  break;
                  default://if operand comes
                  postfix[p]=symbol;
                  p++;
              }
      }
      while(top!=-1)
      {
          postfix[p]=pop();
          //printf("%c",pop());
          p++;
      }
      postfix[p]='\0';
  }
  int main()
  {
      printf("Enter the infix expression:\n");
      scanf("%s",infix);
      printf("The post fix expression is:\n");
      infix_to_postfix();
      printf("-&gt;  %s",postfix);
      return 0;
  }
  </code></pre>