The Algorithm for Evaluating a Postfix Expression is given here
Program:
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;
}