Download presentation
Presentation is loading. Please wait.
1
Stack Applications
2
Arithmetic Expressions
Arithmetic expressions have operands (variables or numeric constants). Operators Binary : +, -, *, / ,% Unary: - Priority convention: - Unary minus (sign for negative numbers) has highest priority *, /, % have medium priority +, - have lowest priority
3
Infix, Prefix, Postfix Example: arithmetic expression a & b consists of operands a, b and operator &. Infix notation is format where operator is specified in between the two operands. a&b Prefix notation is format where operator is specified before the two operands & a b Postfix notation is format where operator is specified after the two operands. Postfix notation is also called RPN or Reverse Polish Notation. a b &
4
Arithmetic Expressions
Prefix Notation Infix Notation Postfix Notation +A * B C A + B * C A B C * + * + A B C (A+B) * C A B + C * + – A B C A – B + C A B – C + – A + B C A – (B+C) A B C + –
5
Boolean Expressions Boolean expressions have
Operands (variables of boolean type or boolean constants TRUE, FALSE). Operators Binary : &, V, =>, Unary: ~ Convention for operator priorities: ~ has highest priority, & has next priority level, v has next priority level, => has next priority level, has lowest priority.
6
Infix, Prefix, Postfix for Boolean Expressions
Example: Boolean expression a &b consists of operands a, b and operator &. Infix notation is format where operator is specified in between the two operands. a&b Prefix notation is format where operator is specified before the two operands & a b Postfix notation is format where operator is specified after the two operands. Postfix notation is also called RPN or Reverse Polish Notation. a b &
7
Boolean Expressions Prefix Notation Infix Notation Postfix Notation
v A & B C A v B & C A B C & v & v A B C (AvB) & C A B v C & v &A B C A & B v C A B & C v & A v B C A & (BvC) A B C v &
8
Evaluating Arithmetic Expressions in Postfix Notation
Algorithm: INPUT: list of tokens that are either numbers or binary arithmetic operators +, -,*, /, and %. List represents postfix notation of an arithmetic expression OUTPUT: value of expression.
9
Create an empty stack that will contain operands.
Take one by one token from the left to right. If token is an operand push it to the stack. If token is an operator op Pop the top item from the stack as operand2. Pop again the top item from the stack as operand1. Perform operation operand1 op operand2. Push result back to stack. When all tokens in input expression are processed stack should contain a single item, which is the value of expression.
10
Evaluate 3 2 - 4 * 3 2 3 2 - 1 4 1 4 * Current Token
Stack Content After Processing the Token (Top is at the right side) What was done 3 Push 3 2 3 2 Push 2 - 1 Pop 2 as second operand, pop 3 as first operand, 3-2 is 1. Push 1. 4 1 4 Push 4 * Pop 4 as second operand, pop 1 as first operand, 1*4 is 4. Push 4.
11
Evaluating Boolean Expressions in Postfix Notation
Algorithm is same as for arithmetic expressions: INPUT: list of tokens that are either TRUE or FALSE or operators &, V, =>, . List represents postfix notation of an arithmetic expression. OUTPUT: value of expression that is either TRUE or FALSE.
12
Create an empty stack that will contain boolean operands.
Take one by one token from the left to right. If token is an operand push it to the stack. If token is an operator op Pop the top item from the stack as operand2. Pop again the top item from the stack as operand1. Perform operation operand1 op operand2. Push result back to stack. When all tokens in input expression are processed stack should contain a single item, which is the boolean value of expression.
13
Evaluate True True & False =>
Current Token Stack Content After Processing the Token (Top is at the right side) What was done True Push True True True & Pop True as second operand, pop True as first operand, True&True is true. Push True. False True False Push False => Pop False as second operand, pop True as first operand, True =>False is False. Push False onto stack.
14
ALGORITHM TO CONVERT AN INFIX EXPRESSION TO RPN
Accepts: An infix expression Convert the expression to RPN Uses a stack to store operations Output: The RPN expression
15
INFIX EXPRESSION TO RPN
Initialize an empty stack of operators. While no error has occurred and the end of the infix expression has not been reached, do the following: a. Get the next input Token (constant, variable, arithmetic operator, left and right parenthesis) in the infix expression.
16
INFIX EXPRESSION TO RPN
b. If Token is (i) a left parenthesis: Push it onto the stack (ii) a right parenthesis: Pop and display stack elements until a left parenthesis is popped, but do not display it (It is an error if the stack becomes empty with no left parenthesis found.) (iii) an operator: If the stack is empty or Token has a higher priority than the top stack, push Token onto the stack. Otherwise, pop and display the top stack element: then repeat the comparison of Token with the new top stack item. A left parenthesis in the stack is assumed to have a lower priority than that of operators. (iv) an operand: Display it.
17
INFIX EXPRESSION TO RPN
c. When the end of the infix expression is reached, pop and display stack items until the stack is empty.
18
Example Convert infix expression into postfix
(7+1)*(6+(3-2)) >> RPN
19
TOKEN Stack After (Top is on the right) Display ( 7 + (+ 1 7 1 ) 7 1 + * * ( 6 * ( + * ( + (
20
(7+1)*(6+(3-2)) >> RPN
* ( + ( - * ( + ( - 2 ) * ( + *
21
(7+1)*(6+(3-2)) >> RPN
displayed Stack content * Add that to display * is RPN
22
Checking Parenteses Create an empty stack
Until a special symbol appears (indicating the end of expression) do Read one by one token from the input expression If token is { If the stack is empty push token to the stack If the stack is non empty pop a top stack element If the popped element is ( or [ type an error message such as “Rule 2 is not satisfied at position…” Otherwise push it back and push the token to the stack. [ … ( …
23
Checking Parenteses } If the stack is empty rule 1 is not satisfied. Type a message … If the stack is not empty pop the top stack element and If it is { then read next token Otherwise type “Rule 1 is not satisfied at position … ] … ) … Other Skip to the next token If the stack is non empty after the end of expression has been encountered then print an error message such as “Rule 1 is violated at the end of expression” else ”Check control is O.K.”
24
The End Thank U
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.