cs2006 - data structures i chapter 7 stacks iii. 2 topics applications infix to postfix expression...

24
CS2006 - Data Structures I Chapter 7 Stacks III

Upload: karlie-chauncey

Post on 14-Dec-2015

240 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

CS2006 - Data Structures I

Chapter 7Stacks III

Page 2: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

2

Topics

Applications Infix to postfix expression Evaluate postfix expression

Page 3: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

3

Infix Expressions Binary operators appear between operands:

W - X / Y – Z (4+3)*2 (2+3)/(9-4)

Order of evaluation is determined by: precedence rules parentheses association (L to R or R to L)

Page 4: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

4

Application: Algebraic Expressions

Infix Expression Evaluation To evaluate an infix expression

Convert the infix expression into postfix Evaluate the postfix expression using stacks

Page 5: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

5

Postfix Expressions Binary operators appear after both

operands: X + Y in postfix form is: X Y +

Order of operations is completely determined by the expression

no parentheses or precedence required for example: A * B - C becomes A B * C -

Page 6: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

6

Postfix Expression

Infix Postfix

6-1

(4+3)*2

(2+3)/(9-4)

Page 7: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

7

Postfix Expression Evaluation

Assumptions: The string is syntactically correct postfix

expression No unary operators are present No exponentiation operators are present

Page 8: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

8

Postfix Expression Evaluation Evaluation of postfix expressions makes use of an

operand stack. Algorithm:

Parse expression from left to right When an operand is encountered, push it onto stack when an operator is encountered, pop the last two operands off

the stack and apply the operation, and push the result onto the stack

when the expression is completely scanned, the final result will be on the stack

2 3 + 9 4 -

Page 9: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

9

Postfix Expression Evaluation

Pseudocode:for ( each character ch in the string )

{ if (ch is an operand )Push value that operand ch represents onto stack

else / / ch is an operator named op{ / / evaluate and push the result

operand2 = top of stackPop the stackoperand1 = top of stackPop the stackresult = operand1 op operand2Push Result onto stack

} / / end if} / / end for

Page 10: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

10

Example

Evaluate 2 3 4 5 + 2 * 1 + + 3 2 * + *

Page 11: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

11

Converting Infix into Postfix

Since postfix expressions are easily evaluated, the easiest way to evaluate infix is to convert from infix to postfix and then evaluate.

This conversion uses an operator stack since low precedence operators must be saved and applied after high precedence ones.

Page 12: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

12

Converting Infix into Postfix

The operands always stay in the same order with respect to one another

An operator will move only to “ the right” with respect to the operands

If in infix expression, the operand x precedes the operator op, in the postfix, the operand x also precedes the operator x

All parentheses are removed

Page 13: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

13

Converting Infix into Postfix Converting Infix into Postfix

Scan infix string from left to right Each time an operand is encountered, copy it

to output When a bracket is encountered, check its

orientation. Push left brackets onto stack If it is a right bracket, pop all operators on the

stack and copy them to output until a matching left bracket is encountered. Discard the left bracket

Page 14: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

14

Converting Infix into Postfix Converting Infix into Postfix

When an operator is encountered, check the top item of the stack

If the priority is >= the current operator, pop the top operator and copy it to output

Continue until an operator of lower priority is encountered or until the stack is empty

Finally, push current operator onto the stack When the end of the expression is reached,

copy the remaining stack contents to output in the order popped

Page 15: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

15

Converting Infix into Postfix

Converting Infix into Postfix Precedence Table

Operator Name Precedence when on stack

Precedence when on input

( Opening parentheses

always stack

0

7

) Closing parentheses never stacked 0

^ Exponentiation 6 5

* / Multiply & divide 4 3

+ - Add & Subtract 2 1

Page 16: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

16

Conversion Example

W - X /Y + Z '-' is pushed onto operator stack '/' has higher precedence than '-' on stack - it gets

pushed '+' has lower precedence than '/' on stack - pop '/' and

output - then '-' is on top of stack - since subtraction associates left to right - pop '-' off stack and output - push '+' onto stack

when end of expression is reached pop remaining operator and output

resulting expression is: W X Y /- Z +

Page 17: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

17

Converting Infix into Postfixstack.push(EOL marker)for (each character ch in the infix expression) { switch (ch) { case operand: //append ch to output postfix expression postfixExpr = postfixExpr + ch; case '(': stack.push(ch); // push ch onto operator stack case ')': while (top of stack is not '(' ) { postfixExpr = postfixExpr + stack.pop(); // pop and append expr. } stack.pop(); case operator: while (!stack.isEmpty() && inputPrec(ch) <= stackPrec(stack.top())) { postfixExpr = postfixExpr + stack.pop(); } stack.push(ch);} // end forwhile (!stack.isEmpty() { // pop all remaining operators off stack and append postfixExpr = postfixExpr + stack.pop();}

Page 18: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

18

Conversion Example

2 + 3 * [(7-5)/2] 2 3 7 5 2 copy into output ‘+' is pushed onto operator stack 3 copy into output ‘*' has higher precedence than ‘+' on stack - it gets

pushed ‘[‘ is left bracket, push it onto stack ‘(‘is left bracket, push it onto stack 7 is copied into output ‘-' has higher precedence than ‘(‘, push onto stack

Page 19: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

19

Conversion Example

2 + 3 * [(7-5)/2]

Page 20: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

20

Prefix ExpressionsInfix Prefix

6-1 - 6 1

(4+3)*2 * + 4 3 2

(2+3)/(9-4) / + 2 3 – 9 4

Page 21: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

21

Review Which of the following is NOT true about

converting infix expressions to postfix expressions? the operands always stay in the same order with

respect to one another the operators always stay in the same order with

respect to one another an operator will move only “to the right” with respect to

the operands all parentheses are removed

Page 22: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

22

Review Which of the following is the postfix form

of the infix expression: (a + b) * c / d a b + c * d / a b * c / d + a + b * c / d a b + c d * /

Page 23: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

23

Review StackInterface provides the specifications

for ______. only the array-based implementation of a stack only the reference-based implementation of a

stack only an implementation of a stack that uses the

ADT list all the implementations of a stack

Page 24: CS2006 - Data Structures I Chapter 7 Stacks III. 2 Topics Applications Infix to postfix expression Evaluate postfix expression

24

Review In the StackInterface class, the push

method accepts as its parameter an item that is an instance of ______. Integer Double String Object