View
220
Download
0
Tags:
Embed Size (px)
Citation preview
Queues
Chapter 6
Chapter 6: Queues 2
Chapter Objectives
• To learn how to represent a waiting line (queue) and how to use the methods in the Queue interface for insertion (offer and add), removal (remove and poll), and for accessing the element at the front (peek and element)
• To understand how to implement the Queue interface using a single-linked list, a circular array, and a double-linked list
• To understand how to simulate the operation of a physical system that has one or more waiting lines using Queues and random number generators
Chapter 6: Queues 3
Queue Abstract Data Type
• Can visualize a queue as a line of customers waiting for service
• The next person to be served is the one who has waited the longest
• New elements are placed at the end of the line
Chapter 6: Queues 4
Queue Abstract Data Type (continued)
Chapter 6: Queues 5
A Print Queue
• Operating systems use queues to • Track of tasks waiting for a scarce resource• To ensure that the tasks are carried out in the order
that they were generated• Print queue: printing is much slower than the process of
selecting pages to print and so a queue is used
Chapter 6: Queues 6
A Print Queue (continued)
Chapter 6: Queues 7
The Unsuitability of a Print Stack
• Stacks are last-in, first-out (LIFO)• The most recently selected document would be the next
to print• Unless the printer queue is empty, your print job may
never get executed if others are issuing print jobs
Chapter 6: Queues 8
Using a Queue for Traversing a Multi-Branch Data Structure
• A graph models a network of nodes, with many links connecting each node to other nodes in the network
• A node in a graph may have several successors• Programmers often use a queue to ensure that nodes
closer to the starting point are visited before nodes that are farther away
Chapter 6: Queues 9
Specification for a Queue Interface
Chapter 6: Queues 10
Class LinkedList Implements the Queue Interface
• LinkedList class provides methods for inserting and removing elements at either end of a double-linked list
• The Java 5.0 LinkedList class implements the Queue interface
• Queue<String> names = new LinkedList<String>(); creates a new Queue reference, names, that stores references to String objects
• The actual object referenced by names is type LinkedList<String>
• Because names is a type Queue<String> reference, you can apply only the Queue methods to it.
Chapter 6: Queues 11
Maintaining a Queue of Customers
• Queue is good for storing a list of customers as they should be serviced in the order in which they arrived
• Algorithm for processCustomers• While the user is not finished
• Display the menu and get the operation selected• Perform the operation selected
Chapter 6: Queues 12
Maintaining a Queue of Customers (continued)
Chapter 6: Queues 13
Using a Double-Linked List to Implement the Queue Interface
• Insertion and removal from either end of a double-linked list is O(1) so either end can be the front (or rear) of the queue
• Java designers decided to make the head of the linked list the front of the queue and the tail the rear of the queue
• Limitation: LinkedList object is used as a queue, it may be possible to apply other LinkedList methods in addition to the ones required by the Queue interface
Chapter 6: Queues 14
Using a Single-Linked List to Implement a Queue
• Can implement a queue using a single-linked list• Class ListQueue contains a collection of Node<E>
objects• Insertions are at the rear of a queue and removals are
from the front• Need a reference to the last list node• Number of elements in the queue is changed by
methods insert and remove
Chapter 6: Queues 15
Using a Single-Linked List to Implement a Queue (continued)
Chapter 6: Queues 16
Implementing a Queue Using a Circular Array
• Time efficiency of using a single- or double-linked list to implement a queue is acceptable• However there are some space inefficiencies
• Storage space is increased when using a linked list due to references stored at each list node
• Array Implementation• Insertion at rear of array is constant time• Removal from the front is linear time• Removal from rear of array is constant time• Insertion at the front is linear time
Chapter 6: Queues 17
Implementing a Queue Using a Circular Array (continued)
Chapter 6: Queues 18
Implementing a Queue Using a Circular Array (continued)
Chapter 6: Queues 19
Implementing a Queue Using a Circular Array (continued)
Chapter 6: Queues 20
Implementing a Queue Using a Circular Array (continued)
Chapter 6: Queues 21
Implementing Class ArrayQueue<E>.Iter
• Just as for class ListQueue<E>, we must implement the missing Queue methods and an inner class Iter to fully implement the Queue interface
• Data field index stores the subscript of the next element to access
• The constructor initializes index to front when a new Iter object is created
• Data field count keeps track of the number of items accessed so far
• Method Iter.remove throws an Unsupported-OperationException because it would violate the contract for a queue to remove an item other than the first one
Chapter 6: Queues 22
Comparing the Three Implementations
• All three implementations are comparable in terms of computation time
• Linked-list implementations require more storage because of the extra space required for the links• Each node for a single-linked list would store a total of
two references• Each node for a double-linked list would store a total
of three references• A circular array that is filled to capacity would require half
the storage of a single-linked list to store the same number of elements
Chapter 6: Queues 23
Simulating Waiting Lines Using Queues
• Simulation is used to study the performance of a physical system by using a physical, mathematical, or computer model of the system
• Simulation allows designers of a new system to estimate the expected performance before building it
• Simulation can lead to changes in the design that will improve the expected performance of the new system
• Useful when the real system would be too expensive to build or too dangerous to experiment with after its construction
Chapter 6: Queues 24
Simulating Waiting Lines Using Queues (continued)
• System designers often use computer models to simulate physical systems• Airline check-in counter for example
• A special branch of mathematics called queuing theory has been developed to study such problems
Chapter 6: Queues 25
Simulate a Strategy for Serving Airline Passengers
Chapter 6: Queues 26
Simulate a Strategy for Serving Airline Passengers (continued)
Chapter 6: Queues 27
Simulate a Strategy for Serving Airline Passengers (continued)
Chapter 6: Queues 28
Simulating Waiting Lines Using Queues (continued)
Chapter 6: Queues 29
Simulating Waiting Lines Using Queues (continued)
Chapter 6: Queues 30
Simulating Waiting Lines Using Queues (continued)
Chapter 6: Queues 31
Simulating Waiting Lines Using Queues (continued)
Chapter 6: Queues 32
Simulating Waiting Lines Using Queues (continued)
Chapter 6: Queues 33
Simulating Waiting Lines Using Queues (continued)
Chapter 6: Queues 34
Simulating Waiting Lines Using Queues (continued)
Chapter 6: Queues 35
Chapter Review
• Queue is an abstract data type with a first-in, first-out structure (FIFO)
• The Queue interface declares methods offer, remove, poll, peek, and element.
• Three ways to implement the Queue interface: double-linked list, single-linked list, and circular array
• To avoid the cost of building a physical system or running an actual experiment, computer simulation can be used to evaluate the expected performance of a system or operation strategy