The greatest mistake you can make in life is to be continually fearing you will make one

Wednesday 15 June 2011

C program for Evaluating a Postfix Expression

The Algorithm for Evaluating a Postfix Expression  is given here

Program:

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#define SIZE 40
int stack[SIZE];
int top=-1;

void push(int n)
{
    if(top==SIZE-1)
    {
        printf("Stack is full\n");
        return;
    }
    else
    {
        top=top+1;
        stack[top]=n;
        printf("Pushed element is %d\n",n);
    }
}

int pop()
{
    int n;
    if(top==-1)
    {
        printf("Stack is empty\n");
        return;
    }
    else
    {
        n=stack[top];
        top=top-1;
        printf("The poped element is %d\n",n);
        return(n);
    }
}

int evaluate(int op1, int op2,char ch)
{
    printf("op1=%d op2=%d ch=%c\n",op1,op2,ch);
    int n;
    if (op1<op2)
    {
        n=op1;
        op1=op2;
        op2=n;
        }
    if(ch=='+')
        n=op1+op2;
    else if(ch=='-')
        n=op1-op2;
    else if(ch=='*')
        n=op1*op2;
    else if(ch=='/')
        n=op1/op2;
    else if(ch=='%')
        n=op1%op2;
    else
    {
        printf("The operator is not identified\n");
        exit(0);
    }
    printf("n=%d\n",n);
    return(n);
}

int main()
{
      char str[50],ch,ch1;
      int i=0,n,op1,op2;

      printf("Enter the Postfix string\n");
      scanf("%s",str);
      ch=str[i];
      while(ch!='\0')
      {
        printf("The char is=%c\n",ch);
           //if(ch=='1' || ch=='2' || ch=='3' || ch=='4' || ch=='5')//
           if(isdigit(ch))
           {
                n=ch-'0';
                push(n);
           }
           else
           {
                op1=pop();
                op2=pop();
                n=evaluate(op1,op2,ch);
                push(n);
           }
           ch=str[++i];
      }
      printf("The value of the arithmetic expression is=%d\n",pop());
      return;
}