Evaluate postfix expression using stack editor

 #include<ctype.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//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 fron 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 code

int main()

{

char exp[]="362/-3+";

//Function call

printf("postfix evaluation:%d",evaluatePostfix(exp));

return 0;

}

Post a Comment

0 Comments
* Please Don't Spam Here. All the Comments are Reviewed by Admin.