22
Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand Output the character into the Postfix Expression If the character x is a left or right parenthesis If the character is “(“ Push it into the stack if the character is “)” Repeatedly pop and output all the operators/characters until “(“ is popped from the stack. If the character x is a is a regular operator Step 1: Check the character y currently at the top of the stack. Step 2: If Stack is empty or y=‘(‘ or y is an operator of lower precedence than x, then push x into stack. Step 3: If y is an operator of higher or equal precedence than x, then pop and output y and push x into the stack. When all characters in infix expression are processed repeatedly pop the character(s) from the stack and output them until the stack is empty.

Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand Output the character into the Postfix Expression

Embed Size (px)

Citation preview

Page 1: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

Infix to postfix conversionScan the Infix expression left to right If the character x is an operand

Output the character into the Postfix Expression If the character x is a left or right parenthesis

If the character is “(“ Push it into the stack

if the character is “)” Repeatedly pop and output all the operators/characters

until “(“ is popped from the stack. If the character x is a is a regular operator

Step 1: Check the character y currently at the top of the stack.

Step 2: If Stack is empty or y=‘(‘ or y is an operator of lower precedence than x, then push x into stack.

Step 3: If y is an operator of higher or equal precedence than x, then pop and output y and push x into the stack.

When all characters in infix expression are processed repeatedly pop thecharacter(s) from the stack and output them until the stack is empty.

Page 2: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

Infix Expression

Postfix Expression

( a + b - c ) * d – ( e + f )

StackInfix to postfix conversion

Page 3: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

a + b - c ) * d – ( e + f )

(

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 4: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

+ b - c ) * d – ( e + f )

(

a

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 5: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

b - c ) * d – ( e + f )

(

a

+

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 6: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

- c ) * d – ( e + f )

(

a b

+

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 7: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

c ) * d – ( e + f )

(

a b +

-

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 8: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

) * d – ( e + f )

(

a b + c

-

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 9: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

* d – ( e + f )

a b + c -

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 10: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

d – ( e + f )

a b + c -

*

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 11: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

– ( e + f )

a b + c - d

*

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 12: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

( e + f )

a b + c – d *

-

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 13: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

e + f )

a b + c – d *

-

(

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 14: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

+ f )

a b + c – d * e

-

(

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 15: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

f )

a b + c – d * e

-

(

+

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 16: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

)

a b + c – d * e f

-

(

+

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 17: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

a b + c – d * e f +

-

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 18: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

a b + c – d * e f + -

Infix Expression

Postfix Expression

StackInfix to postfix conversion

Page 19: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

#include<stdio.h>#include<stdlib.h>#define STACKSIZE 20typedef struct{int top;char items[STACKSIZE];}STACK;void push(STACK *, char);char pop(STACK *);void main(){int i;char x,y, E[20] ; /* Assume that Infix Expression E contains single-digit integers/parenthesis/operators*/STACK s;s.top = -1; /* Initialize the stack is */printf("Enter the Infix Expression:");scanf("%s",E);for(i=0;E[i] != '\0';i++){x= E[i];

Page 20: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

if(x<=’z’ && x>=’a’) /* Consider all lowercase letter operands from a to z */printf(“%c”,x);else if(x == ’(’)push(&s ,x);else if(x == ’)’){y=pop(&s) ;while(y != ‘(‘){printf(“%c”,y);y=pop(&s) ;}}else {if(s.top ==-1 || s.items[s.top] == ‘(‘)push(&s ,x);else {y = s.items[s.top]; /* y is the top operator in the stack*/if( y==’*’ || y==’/’){ /* precedence of y is higher/equal to x*/printf(“%c”, pop(&s));push(&s ,x);}

Page 21: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

else if ( y==’+’ || y==’-’)if( x==’+’ || x==’-’) { /* precedence of y is equal to x*/printf(“%c”, pop(&s));push(&s ,x);}else /* precedence of y is less than x*/push(&s ,x);}}}while(s.top != -1)printf(“%c”,pop(&s));}void push(STACK *sptr, char ps) /*pushes ps into stack*/{if(sptr->top == STACKSIZE-1){printf("Stack is full\n");exit(1); /*exit from the function*/}elsesptr->items[++sptr->top]= ps;}

Page 22: Infix to postfix conversion Scan the Infix expression left to right If the character x is an operand  Output the character into the Postfix Expression

char pop(STACK *sptr){if(sptr->top == -1){printf("Stack is empty\n");exit(1); /*exit from the function*/}elsereturn sptr->items[sptr->top--];}