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;
 | 
						|
}
 |