Tuesday, 16 June 2015

To Convert From Infix to Postfix Expression Using stack


#include<stdio.h>
#include<ctype.h>
void push(char *,int *,char []);
char pop(int *,char []);
void display(int *,char []);
int precedence(char);
void in_to_post(char[],char []);
main()
{
   char infix[50],postfix[50];
   printf("\n..ENTER THE INPUT STRING..");
   scanf("%s",infix);
   printf("\n..THE POSTFIX FORMAT IS GENERATED AND YOU CAN SEE THE SEQUENCE OF STACK..\n");
   in_to_post(infix,postfix);
}
void push(char *symbol,int *top,char s[50])
{
   s[++(*top)]=*symbol;
}
char pop(int *top,char s[50])
{
   return s[(*top)--];
}
void display(int *top,char s[50])
{
   int i;
   for(i=*top;i>=0;i--)
   {
       printf("%c",s[i]);
   }
}
int precedence(char symbol)
{
   switch(symbol)
   {
       case '+':
                return 1;
       case '-':
                return 1;
       case '*':
                return 2;
       case '/':
                return 2;
       case '^':
                return 3;
       case '(':
                return -1;                              
   }
}

void in_to_post(char infix[50],char postfix[50])
{
   int i;
   char symbol,x;
   char s[50];
   int top=-1;
   int j=-1;
   for(i=0;infix[i]!='\0';i++)
   {
   symbol=infix[i];
          if(isalpha(symbol))
          {
             postfix[++j]=symbol;
          }
          else
          {
                       if(top==-1)
                       {
                          push(&symbol,&top,s);
                       }
                       else
                       {
                                    if(symbol==')')
                                    {      
                                                   x=pop(&top,s);
                                                   while(x!='(')
                                                   {
                                                       postfix[++j]=x;
                                                       x=pop(&top,s);
                                                   }
                                    }
                                    else
                                   {
                                       if(symbol=='(')
                                       {
                                           push(&symbol,&top,s);
                                       }
                                       else
                                       {
                                                   while(precedence(symbol)<=precedence(s[top]))
                                                   {
                                                       postfix[++j]=pop(&top,s);
                                                   }                               
                                                   push(&symbol,&top,s);
                                       }
                                         
                                   }
                          }
          }
          printf("\n");
          display(&top,s);
   }
   while(top!=-1)
   {
       postfix[++j]=pop(&top,s);
   }
   postfix[++j]='\0';
   printf("\nThe post fix expression is : ");
   printf("\n%s",postfix);
}




No comments:

Post a Comment