Stack & Queue Applications: Dept. of Computer Science Faculty of Science and Technology
Stack & Queue Applications: Dept. of Computer Science Faculty of Science and Technology
Expression evaluation and Expression conversion. [Stack & Queue] [Can also be
achieved using only Stack]
INFIX: The expressions in which operands surround the operator, i.e. operator is in
between the operands. e.g. x+y, 6*3 etc. The infix notation is the general way we
write an expression.
POSTFIX: Also Known as Reverse Polish Notation (RPN). The operator comes after the
operands, i.e. operator comes post of the operands, so the name postfix. e.g. xy+,
xyz+* etc.
PREFIX: Also Known as Polish notation. The operator comes before the operands, i.e.
operator comes pre of the operands, so the name prefix. e.g. +xy, *+xyz etc.
Infix
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’
Precedence and Associative property
This makes the evaluation of expression more difficult than is necessary for the
processor.
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 Precedence and
Associative property.
The 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.
So, it is easier (complexity wise) for the processor to evaluate expressions that are in
these forms.
Examples of infix to prefix
and postfix
We will read the expression as a string and for each character we will do the following
three things:
1. Whenever we get an opening parenthesis, we will push it into the stack.
2. When we get a closing parenthesis we will check that with the top of the stack. If the
top of the stack has the same type of opening parenthesis, we will pop it.
3. We skip the character in the string which is not a parenthesis.
Finally if you have reached the end of the expression and the stack is also empty, that
means the expression is “well formed”. In any other case, the expression is “not well
formed”.
Parentheses Check Using Stack
(x{x[]}x)
We will read the expression as a string and for each character we will do the following
three things:
1. Whenever we get an opening parenthesis, we will push it into the stack.
2. When we get a closing parenthesis we will check that with the top of the stack. If
the top of the stack has the same type of parenthesis but an opening one, we will
pop it.
3. We skip the character in the string which is not a parenthesis.
This expression is
“well formed”
Converting Infix to Postfix
Using Stack & Queue
Infix Expression: 2*6/(4-1)+5*3
Add ')' to the end of Infix; Push( '(' ); Infix 2 * 6 / ( 4 - 1 ) + 5 * 3
do{
OP = next symbol from left of Infix;
if OP is OPERAND then EnQueue( OP );
else if OP is OPERATOR then{ Postfix 2 6 * 4 1 - / 5 3 * +
if OP = '(' then Push( OP );
else if OP = ')' then{
while TopElement() != '(' do{ Stack ( + *
/ ( * -
Enqueue(TopElement());
Pop();
}
Pop();
}else{
while Precedence( OP ) <= Precedence( TopElement() ) do{
Enqueue(TopElement());
Pop(); End ofOPERATOR
OPERAND
Expression
}
Push( OP );
} /
+
* <
- StackTop(
= )
( +
(
* )
/
}while !IsEmpty();
Evaluating Postfix Expression
Using Stack & Queue
Postfix Expression: 26*41-/53*+
EnQueue( ')' ); Postfix 2 6 * 4 1 - / 5 3 * + )
while ( FrontElement() != ')' ) do{
OP = FrontElement();
DeQueue(); Stack 2
12
19
4 6
15
4
3
5 1
3
if OP is OPERAND then Push( OP );
else if OP is OPERATOR then{
OperandRight = TopElement();
Pop();
OperandLeft = TopElement();
Pop();
x = Evaluate(OperandLeft, OP, OperandRight);
Push(x);
} OPERATOR
OPERAND
}
Result = TopElement();
Pop();
Evaluate(
Evaluate(
Evaluate(
Expression
End of
4,
2,
5,
12,
4,
Expression
‘)‘
'+',
Result
'*',
'-',
'/',15
613=
3 )))=
19
==15
12
3
19
4
cout << Result;
Books
1. http://www.cs.uregina.ca/Links/class-info/210/Stack/
2. http://www.cs.csi.cuny.edu/~zelikovi/csc326/data/assignment5.htm