diff --git a/Evaluation_of_postfix_using_stack.c b/Evaluation_of_postfix_using_stack.c new file mode 100644 index 0000000..84f5880 --- /dev/null +++ b/Evaluation_of_postfix_using_stack.c @@ -0,0 +1,78 @@ +/*Evaluation of postfix expression in c*/ +#include +#include +#include +#include +#include +int stack[20]; +int top = -1; + +void push(int x) +{ + stack[++top] = x; +} + +int pop() +{ + return stack[top--]; +} + +int main() +{ + char exp[20]; + char *e; + int n1,n2,n3,num; + scanf("%s",exp); + e = exp; + while(*e != '\0') + { + if(isdigit(*e)) + { + num = *e - 48; + push(num); + } + else + { + n1 = pop(); + n2 = pop(); + switch(*e) + { + case '+': + { + n3 = n1 + n2; + break; + } + case '-': + { + n3 = n2 - n1; + break; + } + case '*': + { + n3 = n1 * n2; + break; + } + case '/': + { + n3 = n2 / n1; + break; + } + case '^': + { + n3 = pow(n2,n1); + break; + } + } + push(n3); + } + e++; + } + printf("%d\n\n",pop()); + return 0; +} + +/*Test case +Input +6523+8*+3+* +Expected output +288