queue
Avoid confusion
Britain Italy
6 Applications of Queues Direct applications –Waiting lists, bureaucracy –Access to shared resources (e.g., printer) –Multiprogramming –Simulations Indirect applications –Auxiliary data type for algorithms –Component of other data types ADS Lecture 11
7 The Queue ADT (GoTa §5.2) 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: –enqueue(object): inserts an element at the end of the queue –object dequeue(): removes and returns the element at the front of the queue Auxiliary queue operations: –object front(): returns the element at the front without removing it –integer size(): returns the number of elements stored –boolean isEmpty(): indicates whether no elements are stored Exceptions –Attempting the execution of dequeue on front of an empty queue throws an EmptyQueueException ADS Lecture 11
9 /** * Inspects the element at the front of the queue element at the front of the queue EmptyQueueException if the queue is empty */ public E front() throws EmptyQueueException; /** * Inserts an element at the rear of the queue element new element to be inserted */ public void enqueue (E element); /** * Removes the element at the front of the queue element removed EmptyQueueException if the queue is empty */ public E dequeue() throws EmptyQueueException; } Queue interface in Java contd.
10 Queue Interface in Java Java interface corresponding to our Queue ADT Requires the definition of class EmptyQueueException No corresponding built-in Java class ADS Lecture 11 public interface Queue { /** * Returns the number of elements in the queue number of elements in the queue */ public int size(); /** * Returns whether the queue is empty true if queue is empty, false otherwise */ public boolean isEmpty();
A naïve implementation We could have a one dimensional array Q An integer pointing to the front of the queue and integer pointing to the end of the queue Q.enqueue(x) would do this increment end Q[end] = x Need also Q.peek(), Q.size(), Q.isEmpty(), Q.isFull() Q.dequeue() would do this discuss!!!
A naïve implementation We could have a one dimensional array Q Q.dequeue() would do this discuss!!! result = Q[front]; for (int i=front+1;i<=end;i++) Q[i-1] = Q[i]; end--; Obviously with tests for empty queue etc. What is the complexity of dequeue?
ADS Lecture 1113 COMPLEXITY Q.peek() O(1) Q.dequeue() O(n) Q.enqueue(x) O(1) Q.isEmpty() O(1)
ADS Lecture 1114 Can use a restricted/disciplined linked list
ADS Lecture 1115
ADS Lecture 1116
ADS Lecture 1117
ADS Lecture 1118
ADS Lecture 1119
ADS Lecture 1120
ADS Lecture 1121
ADS Lecture 1122
ADS Lecture 1123
ADS Lecture 1124
ADS Lecture 1125
ADS Lecture 1126
ADS Lecture 1127
ADS Lecture 1128
ADS Lecture 1129
ADS Lecture 1130
ADS Lecture 1131
ADS Lecture 1132
ADS Lecture 1133
ADS Lecture 1134
ADS Lecture 1135
ADS Lecture 1136
ADS Lecture 1137
ADS Lecture 1138
ADS Lecture 1139 COMPLEXITY Q.peek() O(1) Q.dequeue() O(1) Q.enqueue(x) O(1) Q.isEmpty() O(1)
Array-based Queue Use an array of size N in a circular fashion Three variables keep track of the front, rear, and size f index of the front element r index immediately past the rear element, where we add new elements (enqueue) size is number of entries in the queue
41 Array-based Queue Q 012rf normal configuration Q 012fr wrapped-around configuration ADS Lecture 11 Use an array of size N in a circular fashion Three variables keep track of the front, rear, and size f index of the front element r index immediately past the rear element, where we add new elements (enqueue) size is number of entries in the queue
42 Queue Operations We use the modulo operator (remainder of division) Algorithm size() return size Algorithm isEmpty() return size == 0 Q 012rf Q 012fr ADS Lecture 11 Operation enqueue throws an exception if the array is full This exception is implementation-dependent Algorithm enqueue(o) if size() = N then throw FullQueueException else Q[r] o r (r + 1) mod N update size! size++
43 Queue Operations (cont.) Operation dequeue throws an exception if the queue is empty This exception is specified in the queue ADT Algorithm dequeue() if isEmpty() then throw EmptyQueueException else o Q[f] f (f + 1) mod N return o ADS Lecture 11 Pros and cons of array based implementation: Again: quick and easy, all methods run in constant time But again, need good idea of capacity a priori update size! size--
44 Application: Round Robin Schedulers We can implement a round robin scheduler using a queue, Q, by repeatedly performing the following steps: 1. e = Q.dequeue() 2. Service element e 3. Q.enqueue(e) The Queue Shared Service 1.Dequeue the next element 3.Enqueue the serviced element 2.Service the next element ADS Lecture 11
Double-Ended queue (deque) ADS Lecture 1145 Supports insertion & deletion at the front and rear of the queue. Pronounced “deck” Since deque requires insertion & removal at both ends of list, using singly linked list would be inefficient Could use a doubly linked list See GoTa p. 213 Fundamental methods are: addFirst(e) addLast(e) removeFirst() removeLast()
Your mission See assessed exercise 2