Computer Science, asked by sharmapratyush7, 4 months ago

Worksheet A4:
Design, develop and execute a program in C to evaluate a valid postfix expression using stack. Assume that the postfix expression is
read as a single line consisting of non-negative single-digit operands and binary arithmetic operators. The operators are hadd),
(subtract). *(multiply), 7(divide)​

Answers

Answered by vikas109286
0

Answer:

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Below is the implementation of above algorithm.

// C++ program to evaluate value of a postfix expression

#include <iostream>

#include <string.h>

using namespace std;

// Stack type

struct Stack

{

int top;

unsigned capacity;

int* array;

};

// Stack Operations

struct Stack* createStack( unsigned capacity )

{

struct Stack* stack = (struct Stack*) malloc(sizeof(struct Stack));

if (!stack) return NULL;

stack->top = -1;

stack->capacity = capacity;

stack->array = (int*) malloc(stack->capacity * sizeof(int));

if (!stack->array) return NULL;

return stack;

}

int isEmpty(struct Stack* stack)

{

return stack->top == -1 ;

}

char peek(struct Stack* stack)

{

return stack->array[stack->top];

}

char pop(struct Stack* stack)

{

if (!isEmpty(stack))

return stack->array[stack->top--] ;

return '$';

}

void push(struct Stack* stack, char op)

{

stack->array[++stack->top] = op;

}

// The main function that returns value of a given postfix expression

int evaluatePostfix(char* exp)

{

// Create a stack of capacity equal to expression size

struct Stack* stack = createStack(strlen(exp));

int i;

// See if stack was created successfully

if (!stack) return -1;

// Scan all characters one by one

for (i = 0; exp[i]; ++i)

{

// If the scanned character is an operand (number here),

// push it to the stack.

if (isdigit(exp[i]))

push(stack, exp[i] - '0');

// If the scanned character is an operator, pop two

// elements from stack apply the operator

else

{

int val1 = pop(stack);

int val2 = pop(stack);

switch (exp[i])

{

case '+': push(stack, val2 + val1); break;

case '-': push(stack, val2 - val1); break;

case '*': push(stack, val2 * val1); break;

case '/': push(stack, val2/val1); break;

}

}

}

return pop(stack);

}

// Driver program to test above functions

int main()

{

char exp[] = "231*+9-";

cout<<"postfix evaluation: "<< evaluatePostfix(exp);

return 0;

}

Answered by deoreshalmali647
0

Answer:

The Postfix notation is used to represent algebraic expressions. The expressions written in postfix form are evaluated faster compared to infix notation as parenthesis are not required in postfix. We have discussed infix to postfix conversion. In this post, evaluation of postfix expressions is discussed.

Explanation:

Following is algorithm for evaluation postfix expressions.

Following is algorithm for evaluation postfix expressions.1) Create a stack to store operands (or values).

2) Scan the given expression and do following for every scanned element.

2) Scan the given expression and do following for every scanned element.…..a) If the element is a number, push it into the stack

2) Scan the given expression and do following for every scanned element.…..a) If the element is a number, push it into the stack…..b) If the element is a operator, pop operands for the operator from stack. Evaluate the operator and push the result back to the stack

3) When the expression is ended, the number in the stack is the final answer

Similar questions