In Fix to Post Fix

  • View
    37

  • Download
    0

Embed Size (px)

Text of In Fix to Post Fix

Infix to Postfix ConversionCourse : Data Structures Course Code : CSE-203

Infix to Postfix Conversion

Need to handle operator precedence Need to handle parentheses Need to handle left-to-right association Input: Infix with variables, integers, operators, parentheses (no exponentiation for now) Output: Postfix form of same expression

Infix PrecedenceParenthesis () Exponentiation ^ Multiplication *, Division / Addition +, Subtraction

We will use a stack to convert infix expression to its equivalent postfix expression In computer science, a stack is an abstract data type and data structure based on the principle ofLast In First Out (LIFO).

Psuedocode

Get the input of an infix expression into an array tos=0 (tos=top of the stack) for (i=0;i0) { for(j=tos;j>=0;j--){ compare the precedence of array[i] and stack[j]; if array[i] is an operator of greater or equal precedence pop stack[j] and append it to the postfix expression; tos--; else break; } then push array[i] into the stack tos++; break; }

if array[i] is '(' : push array[i] into the stack tos++; if array[i] is ')' : for(k=tos;k>=0;k--) { if ( stack[k]!=( ) pop stack[k] and append it to the postfix expression; tos --; if ( stack==( ) tos --; break; } if array[i]is NULL: for(l=tos;l>=0;l--) { pop stack[l] and append it to the postfix expression; }

}

Infix inputa*b + (b-c)/g * ( (a+d) * (b-c/f) )Lets start converting it to its equivalent postfix form using a stack.

Infix to postfix conversioninfix expressiona*b + (b-c)/g * ( (a+d) * (b-c/f) )

postfix expression

Infix to postfix conversioninfix expression*b + (b-c)/g * ( (a+d) * (b-c/f) )

postfix expressiona

Infix to postfix conversioninfix expressionb + (b-c)/g * ( (a+d) * (b-c/f) )

postfix expressiona

*

Infix to postfix conversioninfix expression+ (b-c)/g * ( (a+d) * (b-c/f) )

postfix expressionab

*

Infix to postfix conversioninfix expression(b-c)/g * ( (a+d) * (b-c/f) )

postfix expressionab*

+

Infix to postfix conversioninfix expressionb-c)/g * ( (a+d) * (b-c/f) )

postfix expressionab* ( +

Infix to postfix conversioninfix expression-c)/g * ( (a+d) * (b-c/f) )

postfix expressionab*b ( +

Infix to postfix conversioninfix expressionc)/g * ( (a+d) * (b-c/f) )

postfix expression( + ab*b

Infix to postfix conversioninfix expression)/g * ( (a+d) * (b-c/f) )

postfix expression( + ab*bc

Infix to postfix conversioninfix expression/g * ( (a+d) * (b-c/f) )

postfix expressionab*bc-

+

Infix to postfix conversioninfix expressiong * ( (a+d) * (b-c/f) )

postfix expressionab*bc/ +

Infix to postfix conversioninfix expression* ( (a+d) * (b-c/f) )

postfix expressionab*bc-g / +

Infix to postfix conversioninfix expression( (a+d) * (b-c/f) )

postfix expressionab*bcg/ * +

Infix to postfix conversioninfix expression(a+d) * (b-c/f) )

postfix expression( * + ab*bcg/

Infix to postfix conversioninfix expressiona+d) * (b-c/f) )

( ( * +

postfix expressionab*bcg/

Infix to postfix conversioninfix expression+d) * (b-c/f) )

( ( * +

postfix expressionab*bcg/a

Infix to postfix conversioninfix expressiond) * (b-c/f) ) + ( ( * +

postfix expressionab*bcg/a

Infix to postfix conversioninfix expression) * (b-c/f) ) + ( ( * +

postfix expressionab*bcg/ad

Infix to postfix conversioninfix expression* (b-c/f) )

postfix expression( * + ab*bcg/ad+

Infix to postfix conversioninfix expression(b-c/f) )

* ( * +

postfix expressionab*bcg/ad+

Infix to postfix conversioninfix expressionb-c/f) ) ( * ( * +

postfix expressionab*bcg/ad+

Infix to postfix conversioninfix expression-c/f) ) ( * ( * +

postfix expressionab*bcg/ad+b

Infix to postfix conversioninfix expression( * ( * + c/f) )

postfix expressionab*bcg/ad+b

Infix to postfix conversioninfix expression( * ( * + /f) )

postfix expressionab*bcg/ad+bc

Infix to postfix conversion/ ( * ( * +

infix expressionf) )

postfix expressionab*bcg/ad+bc

Infix to postfix conversion/ ( * ( * +

infix expression))

postfix expressionab*bcg/ad+bcf

Infix to postfix conversioninfix expression)

* ( * +

postfix expressionab*bcg/ad+bcf/-

Infix to postfix conversioninfix expression

postfix expressionab*bcg/ad+bcf/-* * +

Infix to postfix conversioninfix expression

postfix expressionab*bcg/ad+bcf/-**

+

Infix to postfix conversioninfix expression

postfix expressionab*bcg/ad+bcf/-**+

Equivalent postfix expressionab*bc g/ad+bcf/-**+

We have observed

When we get any integer or character it goes to the output. The order of the operands in the postfix expression is the same as the order in the infix expression, and the operands that appear to the left of an operator in the infix expression also appear to its left in the postfix expression. When we get an operator, it is pushed onto the stack maintaining the following rule if the stack is empty, the operator is pushed onto the stack. However, if the stack is not empty, at first we pop the operators of greater or equal precedence from the stack and append them to postfix expression. Then the new operator is pushed onto the stack. Thus, this step orders the operators by precedence and in accordance with left-to-right association.

We have observed

After getting a left parenthesis ( , 1 & 2 is maintained until we get right parenthesis ). When ")" is encountered, we pop operators off the stack and append them to the end of postfix expression until we encounter the matching "(". Within a pair of parentheses, precedence and left-to-right association determine the order of the operators. When we reach the end of the string, we append the remaining contents of the stack to postfix expression.

And finally we get the postfix expression.

Thanks to

..

Course teacher: Abul Hasan Samee

Made bySabrina Hossain Tonny Roll : 200614033 CSE-7 MIST