85 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| 
 | |
| #define MAX_SIZE 100
 | |
| 
 | |
| int stack[MAX_SIZE];
 | |
| int top = -1;
 | |
| 
 | |
| void push(int item)
 | |
| {
 | |
|     if (top >= MAX_SIZE - 1)
 | |
|     {
 | |
|         printf("Stack Overflow\n");
 | |
|         return;
 | |
|     }
 | |
|     stack[++top] = item;
 | |
| }
 | |
| 
 | |
| int pop()
 | |
| {
 | |
|     if (top < 0)
 | |
|     {
 | |
|         printf("Stack Underflow\n");
 | |
|         return -1;
 | |
|     }
 | |
|     return stack[top--];
 | |
| }
 | |
| 
 | |
| int isDigit(char c)
 | |
| {
 | |
|     return c >= '0' && c <= '9';
 | |
| }
 | |
| 
 | |
| int evaluatePostfix(char *exp)
 | |
| {
 | |
|     int i, operand1, operand2, result;
 | |
| 
 | |
|     for (i = 0; exp[i] != '\0'; i++)
 | |
|     {
 | |
|         if (isDigit(exp[i]))
 | |
|         {
 | |
|             push(exp[i] - '0');
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             operand2 = pop();
 | |
|             operand1 = pop();
 | |
|             switch (exp[i])
 | |
|             {
 | |
|             case '+':
 | |
|                 push(operand1 + operand2);
 | |
|                 break;
 | |
|             case '-':
 | |
|                 push(operand1 - operand2);
 | |
|                 break;
 | |
|             case '*':
 | |
|                 push(operand1 * operand2);
 | |
|                 break;
 | |
|             case '/':
 | |
|                 if (operand2 == 0)
 | |
|                 {
 | |
|                     printf("Error: Division by zero\n");
 | |
|                     return -1;
 | |
|                 }
 | |
|                 push(operand1 / operand2);
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     return pop();
 | |
| }
 | |
| 
 | |
| int main()
 | |
| {
 | |
|     char exp[MAX_SIZE];
 | |
|     printf("Enter a postfix expression: ");
 | |
|     gets(exp);
 | |
| 
 | |
|     int result = evaluatePostfix(exp);
 | |
|     if (result != -1)
 | |
|     {
 | |
|         printf("Result: %d\n", result);
 | |
|     }
 | |
|     return 0;
 | |
| }
 | 
