0% found this document useful (0 votes)
238 views

Stacks: (Infix, Postfix and Prefix Expressions)

The document discusses different types of mathematical expressions: infix, postfix, and prefix. Infix expressions write operands around the operator (e.g. x+y). Postfix puts the operator after operands (e.g. xy+). Prefix puts the operator before operands (e.g. +xy). Postfix and prefix don't require considering operator priority when evaluating, making them easier for computers to parse compared to infix. The document also provides examples and algorithms for converting between infix, postfix, and prefix notations.

Uploaded by

Md.Torikul Islam
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
238 views

Stacks: (Infix, Postfix and Prefix Expressions)

The document discusses different types of mathematical expressions: infix, postfix, and prefix. Infix expressions write operands around the operator (e.g. x+y). Postfix puts the operator after operands (e.g. xy+). Prefix puts the operator before operands (e.g. +xy). Postfix and prefix don't require considering operator priority when evaluating, making them easier for computers to parse compared to infix. The document also provides examples and algorithms for converting between infix, postfix, and prefix notations.

Uploaded by

Md.Torikul Islam
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 48

Stacks

(Infix, Postfix and Prefix


Expressions)
Algebraic Expression
• An algebraic expression is a legal combination of operands and
the operators.
• Operand is the quantity (unit of data) on which a mathematical
operation is performed.
• Operand may be a variable like x, y, z or a constant like 5, 4,0,9,1
etc.
• Operator is a symbol which signifies a mathematical or logical
operation between the operands. Example of familiar operators
include +,-,*, /, ^
• Considering these definitions of operands and operators now we
can write an example of expression as x+y*z.
Infix, Postfix and Prefix Expressions
• INFIX: From our schools times we have been familiar with the
expressions in which operands surround the operator, e.g.
x+y, 6*3 etc this way of writing the Expressions is called infix
notation.

• POSTFIX: Postfix notation are also Known as Reverse Polish


Notation (RPN). They are different from the infix and prefix
notations in the sense that in the postfix notation, operator
comes after the operands, e.g. xy+, xyz+* etc.

• PREFIX: Prefix notation also Known as Polish notation.In the


prefix notation, as the name only suggests, operator comes
before the operands, e.g. +xy, *+xyz etc.
Operator Priorities
• How do you figure out the operands of an
operator?
–a+b*c
–a*b+c/d
• This is done by assigning operator priorities.
priority(*) = priority(/) > priority(+) = priority(-)
• When an operand lies between two operators,
the operand associates with the operator that
has higher priority.
Tie Breaker

• When an operand lies between two


operators that have the same priority, the
operand associates with the operator on
the left.
–a+b-c
–a*b/c/d
Delimiters
• Subexpression within delimiters is treated as a
single operand, independent from the
remainder of the expression.
– (a + b) * (c – d) / (e – f)
WHY
• Why to use these weird looking PREFIX and POSTFIX notations
when we have simple INFIX notation?

• To our surprise INFIX notations are not as simple as they seem


specially while evaluating them. To evaluate an infix
expression we need to consider Operators’ Priority and
Associative property
– For example expression 3+5*4 evaluate to 32 i.e. (3+5)*4
or to 23 i.e. 3+(5*4).

• To solve this problem Precedence or Priority of the operators


were defined. Operator precedence governs evaluation order.
An operator with higher precedence is applied before an
operator with lower precedence.
Infix Expression Is Hard To Parse
• Need operator priorities, tie breaker, and
delimiters.
• This makes computer evaluation more
difficult than is necessary.
• Postfix and prefix expression forms do not
rely on operator priorities, a tie breaker,
or delimiters.
• So it is easier to evaluate expressions that
are in these forms.
Prefix and Postfix Parsing
• Due to above mentioned problem of considering operators'
Priority and Associative property while evaluating an
expression using infix notation, we use prefix and postfix
notations.

• Both prefix and postfix notations have an advantage over infix


that while evaluating an expression in prefix or postfix form
we need not consider the Priority and Associative property
(order of brackets).
– E.g. x/y*z becomes */xyz in prefix and xy/z* in
postfix. Both prefix and postfix notations make
Expression Evaluation a lot easier.
Examples of infix to prefix and post fix
Infix PostFix Prefix

A+B AB+ +AB

(A+B) * (C + D) AB+CD+* *+AB+CD

A-B/(C*D^E) ABCDE^*/- -A/B*C^DE


Example: postfix expressions

• Postfix notation is another way of writing arithmetic


expressions.
 

• In postfix notation, the operator is written after the two


 
operands.
infix: 2+5 postfix: 2 5 +
• Expressions are evaluated from left to right.
 

• Precedence rules and parentheses are never needed!!


Suppose that we would like to rewrite
A+B*C in postfix
• Applying the rules of precedence,we obtained

A+B*C
A+(B*C) Parentheses for emphasis

A+(BC*) Convert the multiplication,Let D=BC*

A+D Convert the addition

A(D)+
ABC*+ Postfix Form
Postfix Examples

Infix Postfix Evaluation

2-3*4+5 234*-5+ -5

(2 - 3) * (4 + 5) 23-45+* -9

2- (3 * 4 +5) 234*5+- -15

Why ? No brackets necessary !


When do we need to use them… 
• So, what is actually done is expression is
scanned from user in infix form; it is converted
into prefix or postfix form and then evaluated
without considering the parenthesis and
priority of the operators.
Algorithm for Infix to Postfix
1) Examine the next element in the input.
2) If it is operand, output it.
3) If it is opening parenthesis, push it on stack.
4) If it is an operator, then
i) If stack is empty, push operator on stack.
ii) If the top of stack is opening parenthesis, push operator on stack
iii) If it has higher priority than the top of stack, push operator on stack.
iv) Else pop the operator from the stack and output it, repeat step 4
5) If it is a closing parenthesis, pop operators from stack and output them
until an opening parenthesis is encountered. pop and discard the opening
parenthesis.
6) If there is more input go to step 1
7) If there is no more input, pop the remaining operators to output.
Infix to postfix conversion
infixVect
(a+b-c)*d–(e+f)

postfixVect
Infix to postfix conversion
stackVect

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

postfixVect

(
Infix to postfix conversion
stackVect

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

postfixVect
a

(
Infix to postfix conversion
stackVect

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

postfixVect
a

+
(
Infix to postfix conversion
stackVect

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

postfixVect
ab

+
(
Infix to postfix conversion
stackVect

infixVect
c)*d–(e+f)

postfixVect
ab+

-
(
Infix to postfix conversion
stackVect

infixVect
)*d–(e+f)

postfixVect
ab+c

-
(
Infix to postfix conversion
stackVect

infixVect
*d–(e+f)

postfixVect
ab+c-
Infix to postfix conversion
stackVect

infixVect
d–(e+f)

postfixVect
ab+c-

*
Infix to postfix conversion
stackVect

infixVect
–(e+f)

postfixVect
ab+c-d

*
Infix to postfix conversion
stackVect

infixVect
(e+f)

postfixVect
ab+c–d*

-
Infix to postfix conversion
stackVect

infixVect
e+f)

postfixVect
ab+c–d*

(
-
Infix to postfix conversion
stackVect

infixVect
+f)

postfixVect
ab+c–d*e

(
-
Infix to postfix conversion
stackVect

infixVect
f)

postfixVect

+ ab+c–d*e

(
-
Infix to postfix conversion
stackVect

infixVect
)

postfixVect

+ ab+c–d*ef

(
-
Infix to postfix conversion
stackVect

infixVect

postfixVect
ab+c–d*ef+

-
Infix to postfix conversion
stackVect

infixVect

postfixVect
ab+c–d*ef+-
Infix to postfix conversion
stackVect

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

postfixVect
ab+c–d*ef+-
Suppose we want to convert 2*3/(2-1)+5*3 into Postfix form,
Suppose we want to convert 2*3/(2-1)+5*3 into Postfix form,
Expression Stack Output
2 Empty 2
* * 2
3 * 23
/ / 23*
( /( 23*
2 /( 23*2
- /(- 23*2
1 /(- 23*21
) / 23*21-
+ + 23*21-/
5 + 23*21-/5
* +* 23*21-/53
3 +* 23*21-/53
Empty   23*21-/53*+
So, the Postfix Expression is 23*21-/53*+
Example
• ( 5 + 6) * 9 +10
will be
• 5 6 + 9 * 10 +
Evaluation a postfix expression
• Each operator in a postfix string refers to the previous
two operands in the string.
• Suppose that each time we read an operand we push
it into a stack. When we reach an operator, its
operands will then be top two elements on the stack
• We can then pop these two elements, perform the
indicated operation on them, and push the result on
the stack.
• So that it will be available for use as an operand of the
next operator.
Evaluating Postfix Notation
• Use a stack to evaluate an expression in
postfix notation.
• The postfix expression to be evaluated is
scanned from left to right.
• Variables or constants are pushed onto the
stack.
• When an operator is encountered, the
indicated action is performed using the top
elements of the stack, and the result
replaces the operands on the stack.
Evaluating a postfix expression
• Initialise an empty stack
• While token remain in the input stream
– Read next token
– If token is a number/variable (operand), push it
into the stack
– Else, if token is an operator, pop top two tokens
off the stack, apply the operator, and push the
answer back into the stack
• Pop the answer off the stack.
Example: postfix expressions
(cont.)
Postfix expressions:
Algorithm using stacks (cont.)
Algorithm for evaluating a postfix
expression
WHILE more input items exist
{
If symb is an operand
then push (opndstk,symb)
else //symbol is an operator
{
Opnd1=pop(opndstk);
Opnd2=pop(opndnstk);
Value = result of applying symb to opnd1 & opnd2 //opnd2 op opnd1
Push(opndstk,value);
} //End of else
} // end while
Result = pop (opndstk);
Question : Evaluate the following
expression in postfix :
623+-382/+*2^3+
Final answer is
• 49
• 51
• 52
• 7
• None of these
Evaluate 623+-382/+*2^3+

Symbol opnd1 opnd2 value opndstk


6 6
2 6,2
3 6,2,3
+ 3 2 5 6,5
- 5 6 1 1
3 1,3
Evaluate- 623+-382/+*2^3+
Symbol opnd1 opnd2 value opndstk
8 1,3,8
2 1,3,8,2
/ 2 8 4 1,3,4
+ 4 3 7 1,7
* 7 1 7 7
2 7,2
^ 2 7 49 49
3 49,3
+ 3 49 52 52
Infix to Prefix Conversion
An infix to prefix conversion algorithm:
1. Reverse the infix string
2. Perform the infix to postfix algorithm on the reversed
string (exception is / being pushed over * or * being pushed over /)
3. Reverse the output postfix string
Example: (A + B) * (B – C)

reverse

(C – B) * (B + A)
Infix to postfix
algorithm

C B - B A + *

reverse
Evaluation of Polish Expressions

• Evaluation is done using a stack data-structure


– Read expression from right to left and build the
stack of numbers (operands).
– When an operator is read two operands are popped
out of the stack they are evaluated with the
operator and the result is pushed into the stack.
– At the end of the expression there must be only one
operand into the stack (the solution) otherwise
ERROR.

47
–  3 – 8  3 2 – ~ 4 – 6 2

6–2 -4 -4 – 4 32

3
6 4 -4 2
2 4 4 -8

8–6 32 6 – (-8)

8 3
6 2 6
-8 -8 -8 Result = 14

48

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy