MIT-Curricular/DS/C/Lab/Week5/PostfixCheck.c

66 lines
1.6 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 a sentinel value instead of exiting
}
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; // Return a sentinel value instead of exiting
}
push(operand1 / operand2);
break;
}
}
}
return pop();
}
int main() {
char exp[MAX_SIZE];
printf("Enter a postfix expression: ");
fgets(exp, MAX_SIZE, stdin);
exp[strcspn(exp, "\n")] = 0; // Remove newline if present
int result = evaluatePostfix(exp);
if (result != -1) {
printf("Result: %d\n", result);
}
return 0;
}