Stack Applications

24
Stack Applications

description

Stack Applications. 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 - PowerPoint PPT Presentation

Transcript of Stack Applications

Page 1: Stack Applications

Stack Applications

Page 2: Stack Applications

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

Page 3: Stack Applications

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 &

Page 4: Stack Applications

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 + –

Page 5: Stack Applications

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.

Page 6: Stack Applications

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 &

Page 7: Stack Applications

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 &

Page 8: Stack Applications

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.

Page 9: Stack Applications

• 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.

Page 10: Stack Applications

Evaluate 3 2 - 4 *Current Token Stack Content

After Processing the Token (Top is at the right side)

What was done

3 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

* 4 Pop 4 as second operand, pop 1 as first operand, 1*4 is 4. Push 4.

Page 11: Stack Applications

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.

Page 12: Stack Applications

• 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.

Page 13: Stack Applications

Evaluate True True & False =>

Current Token Stack Content After Processing the Token (Top is at the right side)

What was done

True True Push True

True True True Push True

& True Pop True as second operand, pop True as first operand, True&True is true. Push True.

False True False Push False

=> False Pop False as second operand, pop True as first operand, True =>False is False. Push False onto stack.

Page 14: Stack Applications

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

Page 15: Stack Applications

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.

INFIX EXPRESSION TO RPN

Page 16: Stack Applications

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.

Page 17: Stack Applications

INFIX EXPRESSION TO RPN

c. When the end of the infix expression is reached, pop and display stack items until the stack is empty.

Page 18: Stack Applications

Example

Convert infix expression into postfix

(7+1)*(6+(3-2)) >> RPN

Page 19: Stack Applications

TOKEN Stack After (Top is on the

right)

Display

( (

7 ( 7

+ (+ 7

1 (+ 7 1

) 7 1 +

* * 7 1 +

( * ( 7 1 +

6 * ( 7 1 + 6

+ * ( + 7 1 + 6

( * ( + ( 7 1 + 6

Page 20: Stack Applications

(7+1)*(6+(3-2)) >> RPN

3 * ( + ( 7 1 + 6 3

- * ( + ( - 7 1 + 6 3

2 * ( + ( - 7 1 + 6 3

) * ( + 7 1 + 6 3 -

) * 7 1 + 6 3 - +

Page 21: Stack Applications

(7+1)*(6+(3-2)) >> RPN

• 7 1 + 6 3 - + displayed

• Stack content *

• Add that to display

• 7 1 + 6 3 - + * is RPN

Page 22: Stack Applications

Checking Parenteses

• Create an empty stack• Until a special symbol appears (indicating the end of

expression) doRead one by one token from the input expressionIf 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.

[ …( …

Page 23: Stack Applications

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.”

Page 24: Stack Applications

The End

Thank U