Stack Applications of Evaluation of Suffix expression with single digit operands and operators

Evaluation of suffix expression using Stack and 3rd Sem Data Structure and application lab 4 a question

Design, Develop and Implement a Program in C for the following Stack Applications
Evaluation of Suffix expression with single digit operands and operators: +, -, *, /, %, ^

/*Design, Develop and Implement a Program in C for the following Stack Applications
Evaluation of Suffix expression with single digit operands and operators: +, -, *, /, %, ^*/

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>

#define MAX 100

int stack[MAX];
int top = -1;

void push(int element);
int pop();
int evaluateExpression(char* expression);

int main()
{
    char expression[MAX];

    printf("Enter a suffix expression: ");
    scanf("%s", expression);

    int result = evaluateExpression(expression);
    printf("Result: %d\n", result);

    return 0;
}

void push(int element)
{
    if (top == MAX - 1)
    {
        printf("Stack Overflow\n");
        exit(0);
    }
    else
    {
        top++;
        stack[top] = element;
    }
}

int pop()
{
    if (top == -1)
    {
        printf("Stack Underflow\n");
        exit(0);
    }
    else
    {
        return stack[top--];
    }
}

int evaluateExpression(char* expression)
{
    int i, op1, op2, result;
    for (i = 0; expression[i]; i++)
    {
        if (isdigit(expression[i]))
        {
            push(expression[i] - '0');
        }
        else
        {
            op2 = pop();
            op1 = pop();
            switch (expression[i])
            {
                case '+':
                    result = op1 + op2;
                    break;
                case '-':
                    result = op1 - op2;
                    break;
                case '*':
                    result = op1 * op2;
                    break;
                case '/':
                    result = op1 / op2;
                    break;
                case '%':
                    result = op1 % op2;
                    break;
                case '^':
                    result = pow(op1, op2);
                    break;
                default:
                    printf("Invalid operator\n");
                    exit(0);
            }
            push(result);
        }
    }
    return pop();
}

Leave a Reply

Your email address will not be published. Required fields are marked *