You are on page 1of 2

//Evaluation of postfix expression.

#include<stdio.h>
#include<conio.h>
#include<limits.h>
#define size 50
int stack[size];
int top=-1;
char postfix[50];
char *oprnd;
void push(int n);
int pop();
int isopr(char);
int isopnd(char);
int operation(char,int,int);

void main()
{
int n,op1,op2,i,flag=0;
float result;
clrscr();
printf("\nEnter any valid postfix expression: ");
gets(postfix);
n=strlen(postfix);
for(i=0;i<n;i++)
{
if(isopnd(postfix[i]))
{ oprnd[0]=postfix[i];
push(atoi(oprnd));
}
else if (isopr(postfix[i]))
{
if ( (op2=pop())!=INT_MIN && (op1=pop())!=INT_MIN)
{
result=operation(postfix[i],op1,op2);
push(result);
}
else
{ printf("\nInvalid postfix expression");
flag=1;
}
}
}
if(top>0)
{ printf("\nInvalid postfix expression"); flag=1;}
if (flag==0)
printf("Evaluation of Postfix Expression: %d",pop());
getch();
}

void push(int t)
{
if(top>=size-1)
printf("\nOverflow");
else
{
stack[++top]=t;
}
}
int pop()
{
int x;
if (top<=-1)
{ printf("\nUnderflow");
return INT_MIN;
}
else
{
x=stack[top--];
return x;
}
}

int isopr(char c)
{
if (c=='*'||c=='/'||c=='%'||c=='+'||c=='-')
return 1;
else return 0;
}

int isopnd(char c)
{
if (c>='0' && c<='9')
return 1;
else return 0;
}
int operation(char oprn, int op1, int op2)
{
switch(oprn)
{
case '*': return (op1*op2);
case '/': return (op1/op2);
case '%': return (op1%op2);
case '+': return (op1+op2);
case '-': return (op1-op2);
}
}

You might also like