Question

I'm trying to implement a code for infix to postfix conversion but I'm not able to obtain the output. By analyzing the program I found that the variable top s not getting updated even though I'm returning its value back to the main. Please help me figure it out. The code is:

#include<stdio.h>

char stack[15];

int check(char op)
{
     int rank=0;

         switch(op)
      {
          case '/': 
                    rank=1;
                    break;
          case '*':
                    rank=2;
                    break;
          case '+':
                    rank=3;
                    break;
          case '-':
                    rank=4;
                    break;                    
      }
      return rank;
}


int POP(char stack[15],int top)
{
    if(top==-1)
    {
         printf("Stack Underflow");
         return top;
    }
    else
    {
        top--;
        printf("%c",stack[top+1]);
        return top;
    }
}



int PUSH(char stack[15],int top,char op)
 {
      char opstack;
      int rank1,rank2;
 if(top>=14)
     {
        printf("Stack Overflow");
        return top;
     }

     else
     {
        if(top==-1)
        {
            top++;
            stack[top]=op;
            return top;
        }

        else
        {
           opstack=stack[top];
           rank1=check(op);
           rank2=check(opstack);    

           if( rank1 <= rank2 )
           {
              top++;
              stack[top]=op;
           }
         else
         {
          top=POP(stack,top);

          top=PUSH(stack,top,op);
         }
             return top;
       }

    }
 }


int main()
{
char string[15],ch;
int top=-1,i;

printf("Enter the infix operation: ");
gets(string);
fflush(stdin);
for(i=0;string[i]!='\0';i++)
{
     ch=string[i];
     if( ((ch>='a') && (ch<='z'))||((ch>='A') &&(ch<='Z')) )
     {
      printf("%c",string[i]);
     }
     else
     {
         ch=string[i];
     top=PUSH(stack,top,ch);
 }
     top=POP(stack,top);
}
return 0; 
} 
Was it helpful?

Solution

in main function add these three lines after for loop End.and remove top=POP(stack,top); inside for loop.

 while(top!=-1)
 top=POP(stack,top);
 printf("\n");

modified main function:

int main()
{
char string[15],ch;
int top=-1,i;

printf("Enter the infix operation: ");
gets(string);
fflush(stdin);
for(i=0;string[i]!='\0';i++)
{
     ch=string[i];
     if( ((ch>='a') && (ch<='z'))||((ch>='A') &&(ch<='Z')) )
     {
      printf("%c",string[i]);
     }
     else
     {
     ch=string[i];
     top=PUSH(stack,top,ch);
     }

}
     while(top!=-1)
     top=POP(stack,top);
     printf("\n");
   return 0;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top