Code: cpp
#include<iostream.h>
#include<ctype.h>
#define SS 100
#define TRUE 1
#define FALSE 0
struct stack
{
int items[SS],top;
};
struct stack s;
int empty(struct stack *ps)
{
if(ps->top==SS-1)
return TRUE;
else
return FALSE;
}
int popandtest(struct stack *ps,int *px,int *pund)
{
if(empty(ps))
{
*pund=TRUE;
return 1;
}
*pund=FALSE;
*px=ps->items[ps->top];
return(*px);
}
void pushandtest(struct stack *ps,int x,int *pover)
{
if(!empty(ps))
{
*pover=TRUE;
return;
}
*pover=FALSE;
ps->items[++(ps->top)]=x;
return;
}
int evalue(struct stack *ps,char post[SS])
{
int i=0,op1,op2,r,v,underflow,overflow;
for(;post[i]!='\0';i++)
{
if(!isalpha(post[i]))
{
op2=popandtest(&s,&s.items[s.top],&underflow);
op1=popandtest(&s,&s.items[s.top],&underflow);
switch(post[i])
{
case '+':r=op1+op2;
pushandtest(&s,r,&overflow);
break;
case '-':r=op1-op2;
pushandtest(&s,r,&overflow);
break;
}
}
}
v=popandtest(&s,&s.items[s.top],&underflow);
return(v);
}
main()
{
char p[SS];
int i,r;
cout<<"Enter a valid postfix expression";
cin>>p;
for(i=0;p[i]!='\0';i++)
{
if(isalpha(p[i]))
{
cout<<"enter value for"<<p[i]<<endl;
cin>>s.items[i];
s.top++;
}
}
r=evalue(&s,p);
cout<<"value="<<r;
return 0;
}