91 lines
		
	
	
		
			No EOL
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			No EOL
		
	
	
		
			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 stack[top--];
 | |
| }
 | |
| 
 | |
| int isOperator(char c)
 | |
| {
 | |
|     return (c == '+' || c == '-' || c == '*' || c == '/');
 | |
| }
 | |
| 
 | |
| int isDigit(char c)
 | |
| {
 | |
|     return (c >= '0' && c <= '9');
 | |
| }
 | |
| 
 | |
| int evaluatePrefix(char *expr)
 | |
| {
 | |
|     int len = strlen(expr);
 | |
|     for (int i = len - 1; i >= 0; i--)
 | |
|     {
 | |
|         if (isDigit(expr[i]))
 | |
|         {
 | |
|             push(expr[i] - '0');
 | |
|         }
 | |
|         else if (isOperator(expr[i]))
 | |
|         {
 | |
|             int operand1 = pop();
 | |
|             int operand2 = pop();
 | |
|             switch (expr[i])
 | |
|             {
 | |
|             case '+':
 | |
|                 push(operand1 + operand2);
 | |
|                 break;
 | |
|             case '-':
 | |
|                 push(operand1 - operand2);
 | |
|                 break;
 | |
|             case '*':
 | |
|                 push(operand1 * operand2);
 | |
|                 break;
 | |
|             case '/':
 | |
|                 if (operand2 != 0)
 | |
|                     push(operand1 / operand2);
 | |
|                 else
 | |
|                 {
 | |
|                     printf("Error: Division by zero\n");
 | |
|                     return -1;
 | |
|                 }
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     return pop();
 | |
| }
 | |
| 
 | |
| int main()
 | |
| {
 | |
|     char expr[MAX_SIZE];
 | |
|     printf("Enter prefix expression: ");
 | |
|     gets(expr);
 | |
| 
 | |
|     int result = evaluatePrefix(expr);
 | |
|     if (result != -1)
 | |
|     {
 | |
|         printf("Result: %d\n", result);
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| } | 
