queue, deque, and priority queue implementations chapter 24 slides by steve armstrong letourneau...

40
Queue, Deque, and Priority Queue Implementati ons Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX 2007, Prentice Hall

Post on 15-Jan-2016

225 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Queue, Deque, and Priority

Queue Implementations

Chapter 24

Slides by Steve ArmstrongLeTourneau University

Longview, TX2007,Prentice Hall

Page 2: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Chapter Contents

• A Linked List Implementation of a Queue

• An Array-Based Implementation of a Queue A Circular Array A Circular Array with One Unused Location

• A Vector-Based Implementation of a Queue

• Circular Linked Implementations of a Queue A Two-Part Circular Linked Chain

Page 3: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Chapter Contents

• Java Class Library: The Class AbstractQueue

• A Doubly Linked Implementation of a Queue

• Possible Implementations of a Priority Queue

• Java Class Library: The Class PriorityQueue

Page 4: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Linked Implementation of a Queue 1

• Use chain of linked nodes for the queue Two ends at opposite ends of chain Accessing last node inefficient Could keep a reference to the tail of the chain

• Place front of queue at beginning of chain

• Place back of queue at end of chain With references to both

Page 5: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Linked Implementation of a Queue

Fig. 24-1 A chain of linked nodes that implements a queue.

Page 6: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Linked Implementation of a Queue

Fig. 24-2 (a) Before adding a new node to an empty chain; (b) after adding to it.

Page 7: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Linked Implementation of a Queue 3

Fig. 24-3 (a) Before adding a new node to the end of a chain; (b) after adding it.

Page 8: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Linked Implementation of a Queue 4

Fig. 24-4 (a) A queue of more than one entry; (b) after removing the queue's front.

Page 9: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Linked Implementation of a Queue

Fig. 24-5 (a) A queue of one entry; (b) after removing the queue's front.

Page 10: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Linked Implementation of a Queue

• View source code of linked implementation of the ADT queue

• Note methods enqueue getFront dequeue isEmpty clear private class Node

Page 11: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Array-Based Implementation of a Queue 7

• Let queue[0] be the front frontIndex, backIndex are indices of front

and back

• If we insist queue[0] is front Must shift entries when we remove the front

• Instead move frontIndex Problem then is array can become full But now beginning of array could be empty

and available for use

Page 12: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Array-Based Implementation of a Queue

Fig. 24-6 An array that represents a queue without shifting its entries: (a) initially; (b) after removing the front twice;

Page 13: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Array-Based Implementation of a Queue

Fig. 24-6 An array that represents a queue without shifting its entries: (c) after several more additions & removals; (d) after two additions that wrap around to the beginning of the array

Page 14: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Circular Array

• When queue reaches end of array Add subsequent entries to beginning

• Array behaves as though it were circular First location follows last one

• Use modulo arithmetic on indicesbackIndex = (backIndex + 1) % queue.length

• Note: with circular arrayfrontIndex == backIndex + 1

both when queue is empty and when full

Page 15: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Circular Array

Fig. 24-7 A circular array that represents a queue: (a) when full; (b) after removing 2 entries; (c) after removing 3 more entries;

Page 16: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Circular Array

Fig. 24-7 A circular array that represents a queue: (d) after removing all but one entry; (e) after removing remaining entry.

Page 17: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Circular Array with One Unused Location

Fig. 24-8 A seven-location circular

array that contains at most six entries

of a queue … continued →

Allows us to distinguish between empty and full queue

Allows us to distinguish between empty and full queue

Page 18: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Circular Array with One Unused Location

Fig. 24-8 (ctd.) A seven-location

circular array that contains at most six entries of a queue.

Page 19: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Circular Array with One Unused Location

• Note source code of class of an array-based implementation of the ADT queue

• Note methods enqueue getFront dequeue doubleArray // a private method isEmpty isArrayFull

Page 20: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Array-Based Implementation of a Queue

Fig. 24-9 An array-base queue: (a) initially; (b) after removing its front by incrementing frontIndex;

Page 21: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Array-Based Implementation of a Queue

Fig. 24-9 An array-base queue: (c) after removing its front by setting queue[frontIndex] to null, then incrementing frontIndex.

Page 22: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Array-Based Implementation of a Queue

Fig. 24-10 Doubling the size of an array-based queue

Page 23: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Vector-Based Implementation of a Queue

• Maintain front of queue at beginning of vector

• Use addElement method to add entry at back Vector expands as necessary

• When remove front element, remaining elements move so new front is at beginning of vector Indexes at front and back not needed

Page 24: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Vector-Based Implementation of a Queue

Fig. 24-11 A vector that represents a queue.

Click to view source code of vector-based implementation

of ADT queue

Click to view source code of vector-based implementation

of ADT queue

Page 25: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Circular Linked Implementations of a Queue

• Last node references first node Now we have a single reference to last node And still locate first node quickly

• No node contains a null

• When a class uses circular linked chain for queue Only one data item in the class The reference to the chain's last node

Page 26: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Circular Linked Implementations of a Queue

Fig. 24-12 A circular linked chain with an external reference to its last node that (a) has more than one node;

(b) has one node; (c) is empty.

Page 27: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Two-Part Linked Chain

• Linked nodes that form the queue followed by linked nodes available for use in the queue queueNode references front of queue node freeNode references first available node

following end of queue

• In essence we have two chains One for the queue One for available nodes All joined in a circle

Page 28: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Two-Part Linked Chain

Fig. 24-13 A two-part circular linked chain

that represents both a queue and the nodes

available to the queue.

Page 29: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Two-Part Linked Chain

Fig. 24-14 A two-part circular linked chain that represents a queue: (a) when it is empty; (b) after adding one entry;

(c) after adding three more entries.

Page 30: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Two-Part Linked Chain

Fig. 24-14 A two-part circular linked chain

that represents a queue: (d) after

removing the front; (e) after adding one

more entry

Page 31: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Two-Part Linked Chain

Fig. 24-15 A chain that requires a new node for an addition to a queue: (a) before the addition;

(b) after the addition.

Page 32: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Two-Part Linked Chain

Fig. 24-16 A chain with a node available for an addition to a queue: (a) before the addition; (b) after the addition.

Page 33: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Two-Part Linked Chain

• View source code of a two-part circular linked implementation of the ADT queue

• Note the node implements• Note methods

enqueue getFront dequeue isEmpty isChainFull

Page 34: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Doubly Linked Implementation of a Deque

• Chain with head reference enables reference of first and then the rest of the nodes

• Tail reference allows reference of last node but not next-to-last

• We need nodes that can reference both Previous node Next node

• Thus the doubly linked chain

Page 35: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Java Class Library: The Class AbstractQueue

• Methods provided by this class

Page 36: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Doubly Linked Implementation of a Deque

Fig. 24-17 A doubly linked chain with head and tail references

Click to view source code of linked

implementation of ADT deque

Click to view source code of linked

implementation of ADT deque

Page 37: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Doubly Linked Implementation of a Deque

Fig. 24-18 Adding to the back of a non empty deque: (a) after the new node is allocated; (b) after the addition is complete.

Page 38: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

A Doubly Linked Implementation of a Deque

Fig. 24-19 (a) a deque containing at least two entries; (b) after removing first node and obtaining reference to the deque's first entry.

Page 39: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Possible Implementations of a Priority Queue

Fig. 24-20 Two possible implementations of a priority queue using (a) an array; (b) a chain of linked nodes.

Page 40: Queue, Deque, and Priority Queue Implementations Chapter 24 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall

Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved. 0-13-237045-X

Java Class Library: The Class PriorityQueue

• Extends java.util.AbstractQueue

• Implements methods in java.util.Queue They adhere to specs of priority queue

• View methods specified