+ All Categories
Home > Documents > Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer...

Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer...

Date post: 16-Dec-2015
Category:
Upload: kianna-southerly
View: 217 times
Download: 0 times
Share this document with a friend
Popular Tags:
31
© 2010 Goodrich, Tamassia Data Structure & Algorithms in JAVA 5 th edition Michael T. Goodrich Roberto Tamassia Chapter 5: Stacks, Queues, and Deques CPSC 3200 Algorithm Analysis and Advanced Data Structure
Transcript
Page 1: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

Data Structure & Algorithms in JAVA

5th editionMichael T. GoodrichRoberto Tamassia

Chapter 5: Stacks, Queues, and DequesCPSC 3200

Algorithm Analysis and Advanced Data Structure

Page 2: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

Chapter Topics• Stacks.• Queues.• Double-Ended Queues.

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia

Page 3: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

3© 2010 Goodrich, Tamassia

Stacks

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 4: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

4© 2010 Goodrich, Tamassia

Abstract Data Types (ADTs)

• An abstract data type (ADT) is an abstraction of a data structure.

• An ADT specifies:• Data stored.• Operations on the data.• Error conditions

associated with operations.

• Example: ADT modeling a simple stock trading system• The data stored are buy/sell orders.• The operations supported are

• order buy(stock, shares, price).• order sell(stock, shares, price).• void cancel(order).

• Error conditions:• Buy/sell a nonexistent stock.• Cancel a nonexistent order.

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 5: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

5© 2010 Goodrich, Tamassia

The Stack ADT

• The Stack ADT stores arbitrary objects.

• Insertions and deletions follow the last-in first-out scheme.

• Think of a spring-loaded plate dispenser

• Main stack operations:• push(object): inserts an element.• object pop( ): removes and

returns the last inserted element.

• Auxiliary stack operations:• object top(): returns the

last inserted element without removing it.

• integer size(): returns the number of elements stored

• boolean isEmpty(): indicates whether no elements are stored

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 6: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

6© 2010 Goodrich, Tamassia

Example

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Operation Output Stack Content push(5) – (5)push(3) – (5,3)pop() 3 (5)push(7) – (5,7)pop() 7 (5)top() 5 (5)pop() 5 ()pop() “error” ()isEmpty() true ()push(9) – (9)push(7) – (9,7)push(3) – (9,7,3)push(5) – (9,7,3,5)size() 4 (9,7,3,5)pop() 5 (9,7,3)push(8) – (9,7,3,8)pop() 8 (9,7,3)pop() 3 (9,7)

Page 7: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

7© 2010 Goodrich, Tamassia

Stack Interface in Java

• Java interface corresponding to our Stack ADT

• Requires the definition of class EmptyStackException

• Different from the built-in Java class java.util.Stack

• http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

Stack.java

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 8: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

8© 2010 Goodrich, Tamassia

Exceptions

• Attempting the execution of an operation of ADT may sometimes cause an error condition, called an exception.

• Exceptions are said to be “thrown” by an operation that cannot be executed.

• In the Stack ADT, operations pop and top cannot be performed if the stack is empty.

• Attempting the execution of pop or top on an empty stack throws an EmptyStackException

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 9: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

9© 2010 Goodrich, Tamassia

Applications of Stacks• Direct applications

• Page-visited history in a Web browser.• Undo sequence in a text editor.• Chain of method calls in the Java Virtual Machine.

• Indirect applications• Auxiliary data structure for algorithms.• Component of other data structures.

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 10: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

10© 2010 Goodrich, Tamassia

Method Stack in the JVM

• The Java Virtual Machine (JVM) keeps track of the chain of active methods with a stack.

• When a method is called, the JVM pushes on the stack a frame containing• Local variables and return value• Program counter, keeping track of the

statement being executed

• When a method ends, its frame is popped from the stack and control is passed to the method on top of the stack

• Allows for recursion

main(){

int i = 5;foo( i );

}

foo(int j) {

int k;k = j+1;bar( k );

}

bar(int m) {

…}

bar PC = 1 m = 6

foo PC = 3 j = 5 k = 6

main PC = 2 i = 5

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 11: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

11© 2010 Goodrich, Tamassia

Array-based Stack

• A simple way of implementing the Stack ADT uses an array.

• We add elements from left to right.

• A variable keeps track of the index of the top element.

S

0 1 2 t

Algorithm size( )return t + 1

Algorithm pop( )if isEmpty( ) then

throw EmptyStackException

else t t 1 return S[t + 1]

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 12: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

12© 2010 Goodrich, Tamassia

Array-based Stack (cont.)

• The array storing the stack elements may become full.

• A push operation will then throw a FullStackException• Limitation of the array-based

implementation.• Not intrinsic to the Stack ADT.

S

0 1 2 t

Algorithm push(o)if t = S.length 1 then

throw FullStackException

else t t + 1S[t] o

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 13: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

© 2010 Goodrich, Tamassia

Performance and Limitations

• Performance• Let n be the number of elements in the stack• The space used is O(n)• Each operation runs in time O(1)

• Limitations• The maximum size of the stack must be defined a priori

and cannot be changed.• Trying to push a new element into a full stack causes an

implementation-specific exception.

13CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 14: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

14© 2010 Goodrich, Tamassia

Array-based Stack in Java

ArrayStack.java

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 15: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

15© 2010 Goodrich, Tamassia

Parentheses Matching

• Each “(”, “{”, or “[” must be paired with a matching “)”, “}”, or “[”• correct: ( )(( )){([( )])}• correct: ((( )(( )){([( )])}• incorrect: )(( )){([( )])}• incorrect: ({[ ])}• incorrect: (

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 16: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

16© 2010 Goodrich, Tamassia

Parentheses Matching AlgorithmAlgorithm ParenMatch(X,n):Input: An array X of n tokens, each of which is either a grouping symbol, avariable, an arithmetic operator, or a numberOutput: true if and only if all the grouping symbols in X matchLet S be an empty stackfor i=0 to n-1 do

if X[i] is an opening grouping symbol thenS.push(X[i])

else if X[i] is a closing grouping symbol thenif S.isEmpty() then

return false {nothing to match with} if S.pop() does not match the type of X[i] then

return false {wrong type} if S.isEmpty() then

return true {every symbol matched} else return false {some symbols were never matched}

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 17: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

17© 2010 Goodrich, Tamassia

HTML Tag Matching<body><center><h1> The Little Boat </h1></center><p> The storm tossed the littleboat like a cheap sneaker in anold washing machine. The threedrunken fishermen were used tosuch treatment, of course, butnot the tree salesman, who even asa stowaway now felt that hehad overpaid for the voyage. </p><ol><li> Will the salesman die? </li><li> What color is the boat? </li><li> And what about Naomi? </li></ol></body>

The Little Boat

The storm tossed the little boatlike a cheap sneaker in an oldwashing machine. The threedrunken fishermen were used tosuch treatment, of course, but notthe tree salesman, who even asa stowaway now felt that he hadoverpaid for the voyage.

1. Will the salesman die?2. What color is the boat?3. And what about Naomi?

HTML.java

For fully-correct HTML, each <name> should pair with a matching </name>

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 18: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

18© 2010 Goodrich, Tamassia

Evaluating Arithmetic Expressions

14 – 3 * 2 + 7 = (14 – (3 * 2) ) + 7

Operator precedence * has precedence over +/–

Associativityoperators of the same precedence groupevaluated from left to rightExample: (x – y) + z rather than x – (y + z)

Idea: push each operator on the stack, but first pop and perform higher and equal precedence operations.

Slide by Matt Stallmann included with permission.

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 19: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

19© 2010 Goodrich, Tamassia

Algorithm for Evaluating Expressions

Two stacks:

• opStk holds operators

• valStk holds values

• Use $ as special “end of input” token with lowest precedence

Algorithm doOp()

x valStk.pop();

y valStk.pop();

op opStk.pop();

valStk.push( y op x )

Algorithm repeatOps( refOp ):

while ( valStk.size() > 1

prec(refOp) ≤ prec(opStk.top())

doOp()

Algorithm EvalExp( )

Input: a stream of tokens representing an arithmetic expression (with numbers)

Output: the value of the expression

while there’s another token z

if isNumber(z) then

valStk.push(z)

else

repeatOps(z);

opStk.push(z)

repeatOps($);

return valStk.top()

Slide by Matt Stallmann included with permission.

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 20: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

20© 2010 Goodrich, Tamassia

Algorithm on an Example Expression

14 ≤ 4 – 3 * 2 + 7 Operator ≤ has lower precedence than +/–

–≤14

4

*3–≤14

4

2*3–≤14

4

+

2*3–≤14

4

+

6–≤14

4 +≤14

-2

$

7+≤14

-2

$

F$

≤145

Slide by Matt Stallmann included with permission.

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 21: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

21© 2010 Goodrich, Tamassia

Queues

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 22: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

22© 2010 Goodrich, Tamassia

The Queue ADT• The Queue ADT stores

arbitrary objects.• Insertions and deletions follow

the first-in first-out scheme.• Insertions are at the rear of

the queue and removals are at the front of the queue.

• Main queue operations:• enqueue(object): inserts an

element at the end of the queue.

• object dequeue( ): removes and returns the element at the front of the queue.

• Auxiliary queue operations:• object front( ): returns the

element at the front without removing it.

• integer size( ): returns the number of elements stored

• boolean isEmpty( ): indicates whether no elements are stored

• Exceptions• Attempting the execution of

dequeue or front on an empty queue throws an EmptyQueueException

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 23: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

23© 2010 Goodrich, Tamassia

ExampleOperation Output Queue Content enqueue(5) – (5)enqueue(3) – (5, 3)dequeue() 5 (3)enqueue(7) – (3, 7)dequeue() 3 (7)front() 7 (7)dequeue() 7 ()dequeue() “error” ()isEmpty() true ()enqueue(9) – (9)enqueue(7) – (9, 7)size() 2 (9, 7)enqueue(3) – (9, 7, 3)enqueue(5) – (9, 7, 3, 5)dequeue() 9 (7, 3, 5)

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 24: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

24© 2010 Goodrich, Tamassia

Applications of Queues

• Direct applications• Waiting lists, bureaucracy,• Access to shared resources (e.g., printer).• Multiprogramming.

• Indirect applications• Auxiliary data structure for algorithms.• Component of other data structures.

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 25: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

25© 2010 Goodrich, Tamassia

Array-based Queue

• Use an array of size N in a circular fashion.• Two variables keep track of the front and rear

• f - index of the front element• r-index immediately past the rear element

• Array location r is kept empty.

Q

0 1 2 rf

normal configuration

Q

0 1 2 fr

wrapped-around configuration

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 26: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

26© 2010 Goodrich, Tamassia

Queue Operations

• We use the modulo operator (remainder of division)

Algorithm size( )return (N - f + r) mod N

Algorithm isEmpty( )return (f = r)

Q

0 1 2 rf

Q

0 1 2 fr

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 27: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

27© 2010 Goodrich, Tamassia

Queue Operations (cont.)

Algorithm enqueue( o )if size( ) = N 1 then

throw FullQueueException

else Q[ r ] or (r + 1) mod N

• Operation enqueue throws an exception if the array is full

• This exception is implementation-dependent

Q

0 1 2 rf

Q

0 1 2 fr

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 28: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

28© 2010 Goodrich, Tamassia

Queue Operations (cont.)

• Operation dequeue throws an exception if the queue is empty.

• This exception is specified in the queue ADT.

Algorithm dequeue( )if isEmpty( ) then

throw EmptyQueueException

elseo Q[ f ]f (f + 1) mod Nreturn o

Q

0 1 2 rf

Q

0 1 2 frCPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 29: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

29© 2010 Goodrich, Tamassia

Queue Interface in Java

• Java interface corresponding to our Queue ADT.

• Requires the definition of class EmptyQueueException

• No corresponding built-in Java class.

Queue.java

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Page 30: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013

Application: Round Robin Schedulers

• We can implement a round robin scheduler using a queue Q by repeatedly performing the following steps:

1. e = Q.dequeue()2. Service element e3. Q.enqueue(e)

Shared Service

EnqueueDequeue

Queue

Page 31: Stacks. Queues. Double-Ended Queues. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013 © 2010 Goodrich, Tamassia.

31© 2010 Goodrich, Tamassia

End of Chapter 5

CPSC 3200 University of Tennessee at Chattanooga – Summer 2013


Recommended