infix to postfix conversion scan the infix expression left to right if the character x is an operand...

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.

Upload: esther-thornton

Post on 05-Jan-2016

224 views

Category:

Documents


0 download

TRANSCRIPT

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--];}