Top Banner
Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5
50

Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Dec 19, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Stacks & QueuesInfix Calculator

CSC 172

SPRING 2002

LECTURE 5

Page 2: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Workshop sign-up

Still time :Dave Feil-Seifer [email protected]

Ross Carmara [email protected]

Page 3: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Infix to postfix

1 + 2 * 3

== 7 (because multiplication has higher precidence)

10 – 4 – 3

== 3 (because subtraction proceeds left to right)

Page 4: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Infix to postfix

4 ^ 3 ^ 2== 262144!= 4096

234

234

Generally,

Rather than:

Page 5: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Precidence

A few simple rules:

() > ^ > * / > + -

Subtraction associates left-to-right

Exponentiation associates right to left

Page 6: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Infix Evaluation

1 – 2 – 4 ^ 5 * 3 * 6 / 7 ^ 2 ^ 2

== -8

(1 – 2) – ( ( ( ( 4 ^ 5) * 3) * 6) / (7 ^ ( 2 ^ 2 ) ) )

Could you write a program to evaluate stuff like this?

Page 7: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Postfix

If we expressed

(1 – 2) – ( ( ( ( 4 ^ 5) * 3) * 6) / (7 ^ ( 2 ^ 2 ) ) )

As

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

Then, we could use the postfix stack evaluator

Page 8: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Postfix evaluation using a stack

1. Make an empty stack

2. Read tokens until EOFa. If operand push onto stack

b. If operator i. Pop two stack values

ii. Perform binary operation

iii. Push result

3. At EOF, pop final result

Page 9: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

Page 10: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

1

Page 11: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

21

Page 12: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

-1

Page 13: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

4-1

Page 14: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

5 4-1

Page 15: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

1024-1

Page 16: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

31024

-1

Page 17: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

3072-1

Page 18: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

63072

-1

Page 19: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

18432-1

Page 20: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

718432

-1

Page 21: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

27

18432-1

Page 22: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

227

18432-1

Page 23: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

47

18432-1

Page 24: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

204118432

-1

Page 25: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

7-1

Page 26: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -

-8

Page 27: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

But how to go from infix to postfix? Could you write a program to do it? What data structures would you use

Stack Queue

How about a simple case just using “+” 1+ 2 + 7 + 4 1 2 7 4 + + +

Operands send on to output? Operator push on stack? Pop ‘em all at the end?

Page 28: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

More complex

2 ^ 5 – 1 == 2 5 ^ 1 –

Modify the simple rule?

If you are an operator, pop first, then push yourself?

1 + 2 + 7 + 4

1 2 + 7 + 4 + ok

Page 29: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Even more complex

3 * 2 ^ 5 - 1

3 2 5 ^ * 1 –

If you are an operator:

Pop if the top of the stack is higher precedence than

Page 30: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

Infix to postfix Stack AlgorithmOperands : Immediately output

Close parenthesis: Pop stack until open parenthesis

Operators: 1. Pop all stack symbols until a symbol of lower

precedence (or a right-associative symbol of equal precedence) appears.

2. Push operator

EOF: pop all remaining stack symbols

Page 31: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

Page 32: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

1

Page 33: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

-

1

Page 34: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

-

1 2

Page 35: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

^-

1 2

Page 36: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

^-

1 2 3

Page 37: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

^^-

1 2 3

Page 38: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

^^-

1 2 3 3

Page 39: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

-

1 2 3 3 ^ ^ -

Page 40: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

(-

1 2 3 3 ^ ^ -

Page 41: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

(-

1 2 3 3 ^ ^ - 4

Page 42: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

+(-

1 2 3 3 ^ ^ - 4

Page 43: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

+(-

1 2 3 3 ^ ^ - 4 5

Page 44: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

*+(-

1 2 3 3 ^ ^ - 4 5

Page 45: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

*+(-

1 2 3 3 ^ ^ - 4 5 6

Page 46: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

-

1 2 3 3 ^ ^ - 4 5 6 * +

Page 47: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

*-

1 2 3 3 ^ ^ - 4 5 6 * +

Page 48: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

*-

1 2 3 3 ^ ^ - 4 5 6 * + 7

Page 49: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

1 2 3 3 ^ ^ - 4 5 6 * + 7 * -

Page 50: Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.

1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6) * 7

1 2 3 3 ^ ^ - 4 5 6 * + 7 * -

((1 – (2 ^ (3 ^ 3))) – (( 4 + (5 * 6)) * 7))

InputTo evaluationstack