Upload
hoangdien
View
224
Download
0
Embed Size (px)
Citation preview
Chapter ObjectivesChapter 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 listTo understand how to simulate the operation of a physical system that has one or more waiting lines using Queues and random number generators
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 listTo understand how to simulate the operation of a physical system that has one or more waiting lines using Queues and random number generators
Queue Abstract Data TypeQueue Abstract Data Type
Can visualize a queue as a line of customers waiting for serviceThe next person to be served is the one who has waited the longestNew elements are placed at the end of the line
Can visualize a queue as a line of customers waiting for serviceThe next person to be served is the one who has waited the longestNew elements are placed at the end of the line
A Print QueueA Print Queue
Operating systems use queues to Track of tasks waiting for a scarce resourceTo 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
Operating systems use queues to Track of tasks waiting for a scarce resourceTo 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
The Unsuitability of a Print StackThe Unsuitability of a Print Stack
Stacks are last-in, first-out (LIFO)The most recently selected document would be the next to printUnless the printer queue is empty, your print job may never get executed if others are issuing print jobs
Stacks are last-in, first-out (LIFO)The most recently selected document would be the next to printUnless the printer queue is empty, your print job may never get executed if others are issuing print jobs
Using a Queue for Traversing a Multi-Branch Data Structure
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 networkA node in a graph may have several successorsProgrammers often use a queue to ensure that nodes closer to the starting point are visited before nodes that are farther away
A graph models a network of nodes, with many links connecting each node to other nodes in the networkA node in a graph may have several successorsProgrammers often use a queue to ensure that nodes closer to the starting point are visited before nodes that are farther away
Class LinkedList Implements the Queue Interface
Class LinkedList Implements the Queue Interface
LinkedList class provides methods for inserting and removing elements at either end of a double-linked listThe Java 5.0 LinkedList class implements the Queue interfaceQueue<String> names = new LinkedList<String>(); creates a new Queue reference, names, that stores references to String objectsThe 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.
LinkedList class provides methods for inserting and removing elements at either end of a double-linked listThe Java 5.0 LinkedList class implements the Queue interfaceQueue<String> names = new LinkedList<String>(); creates a new Queue reference, names, that stores references to String objectsThe 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.
Maintaining a Queue of CustomersMaintaining a Queue of Customers
Queue is good for storing a list of customers as they should be serviced in the order in which they arrivedAlgorithm for processCustomers
While the user is not finishedDisplay the menu and get the operation selectedPerform the operation selected
Queue is good for storing a list of customers as they should be serviced in the order in which they arrivedAlgorithm for processCustomers
While the user is not finishedDisplay the menu and get the operation selectedPerform the operation selected
Using a Double-Linked List to Implement the Queue Interface
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 queueJava designers decided to make the head of the linked list the front of the queue and the tail the rear of the queueLimitation: 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
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 queueJava designers decided to make the head of the linked list the front of the queue and the tail the rear of the queueLimitation: 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
Using a Single-Linked List to Implement a Queue
Using a Single-Linked List to Implement a Queue
Can implement a queue using a single-linked listClass ListQueue contains a collection of Node<E> objectsInsertions are at the rear of a queue and removals are from the frontNeed a reference to the last list nodeNumber of elements in the queue is changed by methods insert and remove
Can implement a queue using a single-linked listClass ListQueue contains a collection of Node<E> objectsInsertions are at the rear of a queue and removals are from the frontNeed a reference to the last list nodeNumber of elements in the queue is changed by methods insert and remove
Using a Single-Linked List to Implement a Queue (continued)Using a Single-Linked List to
Implement a Queue (continued)
Implementing a Queue Using a Circular Array
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 inefficienciesStorage space is increased when using a linked list due to references stored at each list nodeArray Implementation
Insertion at rear of array is constant timeRemoval from the front is linear timeRemoval from rear of array is constant timeInsertion at the front is linear time
Time efficiency of using a single- or double-linked list to implement a queue is acceptable
However there are some space inefficienciesStorage space is increased when using a linked list due to references stored at each list nodeArray Implementation
Insertion at rear of array is constant timeRemoval from the front is linear timeRemoval from rear of array is constant timeInsertion at the front is linear time
Implementing a Queue Using a Circular Array (continued)
Implementing a Queue Using a Circular Array (continued)
Implementing a Queue Using a Circular Array (continued)
Implementing a Queue Using a Circular Array (continued)
Implementing a Queue Using a Circular Array (continued)
Implementing a Queue Using a Circular Array (continued)
Implementing a Queue Using a Circular Array (continued)
Implementing a Queue Using a Circular Array (continued)
Implementing Class ArrayQueue<E>.IterImplementing Class
ArrayQueue<E>.IterJust as for class ListQueue<E>, we must implement the missing Queue methods and an inner class Iter to fully implement the Queue interfaceData field index stores the subscript of the next element to accessThe constructor initializes index to front when a new Iter object is createdData field count keeps track of the number of items accessed so farMethod Iter.remove throws an Unsupported-OperationException because it would violate the contract for a queue to remove an item other than the first one
Just as for class ListQueue<E>, we must implement the missing Queue methods and an inner class Iter to fully implement the Queue interfaceData field index stores the subscript of the next element to accessThe constructor initializes index to front when a new Iter object is createdData field count keeps track of the number of items accessed so farMethod Iter.remove throws an Unsupported-OperationException because it would violate the contract for a queue to remove an item other than the first one
Comparing the Three Implementations
Comparing the Three Implementations
All three implementations are comparable in terms of computation timeLinked-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 referencesEach 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
All three implementations are comparable in terms of computation timeLinked-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 referencesEach 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
Simulating Waiting Lines Using Queues
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 systemSimulation allows designers of a new system to estimate the expected performance before building itSimulation can lead to changes in the design that will improve the expected performance of the new systemUseful when the real system would be too expensive to build or too dangerous to experiment with after its construction
Simulation is used to study the performance of a physical system by using a physical, mathematical, or computer model of the systemSimulation allows designers of a new system to estimate the expected performance before building itSimulation can lead to changes in the design that will improve the expected performance of the new systemUseful when the real system would be too expensive to build or too dangerous to experiment with after its construction
Simulating Waiting Lines Using Queues (continued)
Simulating Waiting Lines Using Queues (continued)
System designers often use computer models to simulate physical systems
Airline check-in counter for exampleA special branch of mathematics called queuing theory has been developed to study such problems
System designers often use computer models to simulate physical systems
Airline check-in counter for exampleA special branch of mathematics called queuing theory has been developed to study such problems
Simulate a Strategy for Serving Airline Passengers
Simulate a Strategy for Serving Airline Passengers
Simulate a Strategy for Serving Airline Passengers (continued)
Simulate a Strategy for Serving Airline Passengers (continued)
Simulate a Strategy for Serving Airline Passengers (continued)
Simulate a Strategy for Serving Airline Passengers (continued)
Chapter ReviewChapter 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 arrayTo 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
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 arrayTo 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