Sunday, August 29, 2010

C Program to evaluate postfix expression

#include<math.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>

#define MAX 30
#define OPERAND 10
#define OPERATOR 20

typedef struct prexp
{
  int top;
  int stack[MAX];
}stck;

void init(stck*);
void push(stck *,int);
int pop(stck *);
void eval(stck *,char,int,int);
int gettype(char);
void main()
{
    char pos[MAX];
    int num1,num2,item,l,i,pr;
    stck stk;
    fflush(stdin);
    clrscr();
    init(&stk);
    printf(" Enter the postfix Expression : ");
    gets(pos);

        for(i=0;pos[i]!='\0';i++)
        {
            if(pos[i]==' '|| pos[i]=='\t')
            continue;

            switch(gettype(pos[i]))
            {
              case OPERAND: item=pos[i]-'0';
                                 push(&stk,item);
                                 break;

              case OPERATOR: num1=pop(&stk);
                                  num2=pop(&stk);
                                  eval(&stk,pos[i],num2,num1);
            }
      }
    printf("%d",stk.stack[0]);
    getch();
}

void init(stck *st)
{
  st->top=-1;
}

void push(stck *st,int num)
{
  st->top++;
  st->stack[st->top]=num;
}

int pop(stck *st)
{
    int num;
    num=st->stack[st->top];
    st->top--;
    return num;
}

void eval(stck *st,char op,int num1,int num2)
{
    int res;
      switch(op)
      {
          case '+': res=num1+num2;
                        break;
          case '-': res=num1-num2;
                        break;
          case '*': res=num1*num2;
                        break;
          case '/': res=num1/num2;
                        break;
          case '%': res=num1%num2;
                        break;
          case '$': res=pow(num1,num2);
                        break;
      }
    push(st,res);
}

int gettype(char c)
{
     switch(c)
     {
     case '+':
     case '-':
     case '*':
     case '/':
     case '$':
     case '%': return OPERATOR;
     default : return OPERAND;
     }
}

No comments:

Post a Comment