COMP 121 Week 14
Download
Report
Transcript COMP 121 Week 14
COMP 121
Week 14: Queues
Objectives
Learn how to represent a queue
Learn how to use the methods in the
Queue interface
Understand how to implement the Queue
interface
Double-linked
list
Single-linked list
Circular array
Queue
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Queue Abstract Data Type
A First-In, First-Out (FIFO) data structure
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 (people) are placed at the
end of the line
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
A Print Queue
Operating systems use queues to:
Keep
track of tasks waiting for a scarce resource
Ensure that the tasks are carried out in the order that
they were generated
Print queue
Printing
is slower than the process of selecting pages
or documents to print
Queue is used to store documents for printing
Documents are printed in the order they were added
to the queue (unless a priority scheme is used)
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
A Print Queue (continued)
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Question: Why not use a Stack
to hold documents for printing?
Answer:
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
Specification of a Queue
Interface
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Queue Methods
add and offer
For
a queue of unlimited size, methods are logically
equivalent
For a bounded queue, add will throw an exception if
the limit has been reached, but offer will return false
peek and element
peek
will return null if the queue is empty, but element
will throw an exception
poll and remove
poll
will return null if the queue is empty, but remove
will throw an exception
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
LinkedList Class and 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
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Queue Example
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
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Using a LinkedList 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
In the Java 5.0 implementation, designers
decided to make the head of the linked list
the front of the queue and the tail the rear
of the queue
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Using a LinkedList to Implement
the Queue Interface (continued)
Because LinkedList implements Queue, it
is possible to apply other LinkedList
methods to a Queue (in addition to the
ones required by the Queue interface)
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Question: What design pattern
could be used to create a better
design for a Queue?
Answer: Adapter Pattern
A better approach would be to create a
new class that wrappers a LinkedList and
implements the Queue interface
Only
Queue methods would be available
Queue methods would be implemented by
calling methods on the LinkedList
Encapsulation would hide linked list
implementation from clients
Using a Single-Linked List to
Implement a Queue
Can implement a queue using a singlelinked 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 offer, poll, and remove
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Using a Single-Linked List to
Implement a Queue (continued)
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
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
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Implementing a Queue Using a
Circular Array (continued)
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
Circular Array Implementation
Both
insertions and removals are constant
time
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Implementing a Queue Using a
Circular Array (continued)
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Implementing a Queue Using a
Circular Array (continued)
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Implementing a Queue Using a
Circular Array (continued)
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Implementing a Queue Using a
Circular Array (continued)
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Comparing the Implementations
All three implementations are comparable
in terms of computation time
All
operations are O(1)
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
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Comparing the Implementations
(continued)
A circular array that is filled to capacity
would require half the storage of a singlelinked list to store the same number of
elements
A circular array that was just reallocated
would be half empty and require the same
amount of storage as a single-linked list
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
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
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Simulating Waiting Lines Using
Queues (continued)
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
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
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
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Summary
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
Multiple ways to implement the Queue interface
Double-linked
list, single-linked list, and circular array
Queues are often used in simulation
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
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using
Java Version 5.0. New York: John Wiley & Sons.
Any Questions?