Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Queues
© 2004 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:
insert(Object): inserts an
element at the end of the
queue
Object remove(): removes and
returns the element at the front
of the queue
© 2004 Goodrich, Tamassia
Stacks
Auxiliary queue
operations:
Object peek(): returns the
element at the front without
removing it
int 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
2
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
© 2004 Goodrich, Tamassia
Stacks
3
Array-based Queue
Use an array of capacity N in a circular fashion
Two variables keep track of the front and rear
f index of the front element
r index of the last element
Initially f =0, r = -1
size: number of elements in the queue
normal configuration
Q
0 1 2
r
f
wrapped-around configuration
Q
0 1 2 r
© 2004 Goodrich, Tamassia
f
Stacks
4
Queue Operations (cont.)
Operation enqueue
throws an exception if
the array is full
OR reallocate
This exception is
implementationdependent
Q
0 1 2
f
Algorithm insert(o)
if size = N then
throw FullQueueException
else
r (r + 1) mod N
Q[r] o
size++
r
Q
0 1 2
© 2004 Goodrich, Tamassia
f
Stacks
r
5
Queue Operations (cont.)
Operation dequeue
throws an exception
if the queue is empty
This exception is
specified in the
queue ADT
Algorithm remove()
if isEmpty() then
throw EmptyQueueException
else
o Q[f]
f (f + 1) mod N
size-return o
Q
0 1 2
© 2004 Goodrich, Tamassia
f
r
Stacks
6
Queue Interface in Java
Java interface
corresponding to
our Queue ADT
Requires the
definition of class
EmptyQueueException
No corresponding
built-in Java class
public interface Queue {
public int size();
public boolean isEmpty();
public Object peek()
throws EmptyQueueException;
public void insert(Object o);
public Object remove()
throws EmptyQueueException;
}
© 2004 Goodrich, Tamassia
Stacks
7
Application: Round Robin
Schedulers
We can implement a round robin scheduler using a
queue, Q, by repeatedly performing the following
steps:
1.
2.
3.
e = Q.remove()
Service element e
Q.insert(e)
The Queue
1. Remove the
next element
2 . Service the
next element
3. Insert the
serviced element
Shared
Service
© 2004 Goodrich, Tamassia
Stacks
8
Queue with a Singly Linked List
We can implement a queue with a singly linked list
The front element is stored at the first node
The rear element is stored at the last node
The space used is O(n) and each operation of the
Queue ADT takes O(1) time
r
nodes
f
elements
© 2004 Goodrich, Tamassia
Stacks
9
Double-Ended Queue ADT (Deque)
Insertion/Deletion at both ends
addFirst(e)
addLast(e)
removeFirst()
removeLast()
getFirst()
getLast()
size()
isEmpty()
© 2004 Goodrich, Tamassia
Stacks
10
Implementing a deque?
singly linked list?
Probably not.
Why?
© 2004 Goodrich, Tamassia
Stacks
11
Deque with a doubly linked list
all operations are O(1)
© 2004 Goodrich, Tamassia
Stacks
12