You are on page 1of 14

• Queues • Linked Lists • Double-Ended Queues

tail

Rome Seattle Toronto Zurich

1

but only the element which has been in the queue the longest may be removed.. • Elements may be inserted at any time. • Elements are inserted at the rear (enqueued) and removed from the front (dequeued) front a0 a1 a2 rear .Queues • A queue differs from a stack in that its insertion and removal routines follows the ﬁrst-in-ﬁrst-out (FIFO) principle.. an-1 Queues and Linked Lists 2 .

dequeue(): Remove the object from the front of the queue and return it. an error occurs if the queue is empty • These support methods should also be deﬁned: .size(): Return the number of objects in the queue . an error occurs if the queue is empty Queues and Linked Lists 3 .enqueue(o): Insert object o at the rear of the queue .The Queue Abstract Data Type • The queue has two fundamental methods: .front(): Return.isEmpty(): Return a boolean value that indicates whether the queue is empty . but do not remove. the front object in the queue.

. index of the element after the rear one • “normal conﬁguration” Q 0 1 2 .f. N = 1. e.An Array-Based Queue • Create a queue using an array in a circular fashion • A maximum size N is speciﬁed..g..000. 0 1 2 Q r f N−1 • What does f=r mean? • How do we compute the number of elements in the queue from f and r? Queues and Linked Lists 4 . f r N−1 • “wrapped around” conﬁguration . index of the front element ..r. • The queue consists of an N-element array Q and two integer variables: .

An Array-Based Queue (contd.) • Pseudo-Code (contd.) Algorithm size(): return (N .f + r) mod N Algorithm isEmpty(): return (f = r) Algorithm front(): if isEmpty() then throw a QueueEmptyException return Q[f] Algorithm dequeue(): if isEmpty() then throw a QueueEmptyException temp ← Q[f] Q[f] ← null f ← (f + 1) mod N return temp Algorithm enqueue(o): if size = N .1 then throw a QueueFullException Q[r] ← o Queues and Linked Lists 5 .

the tail of the list is the rear of the queue • why not the opposite? Queues and Linked Lists 6 .Implementing a Queue with a Singly Linked List • nodes connected in a chain by links head tail ∅ Rome Seattle Toronto • the head of the list is the front of the queue.

Inserting at the Tail • create a new node head tail ∅ Rome Seattle Toronto Zurich ∅ • chain it and move the tail reference head tail ∅ Rome Seattle Toronto Zurich • how about removing at the tail? Queues and Linked Lists 8 .

removeFirst(): Removes and returns ﬁrst element . supports insertion and deletion from the front and back.Double-Ended Queues • A double-ended queue. • The Deque Abstract Data Type .size() .insertFirst(e): Insert e at the deginning of deque. or deque.last() . .removeLast(): Removes and returns last element • Additionally supported methods include: .ﬁrst() .isEmpty() Queues and Linked Lists 9 .insertLast(e): Insert e at end of deque .

Implementing Stacks and Queues with Deques • Stacks with Deques: Stack Method size() isEmpty() top() push(e) pop() Deque Implementation size() isEmpty() last() insertLast(e) removeLast() • Queues with Deques: Queue Method size() isEmpty() front() enqueue() dequeue() Deque Implementation size() isEmpty() ﬁrst() insertLast(e) removeFirst() Queues and Linked Lists 10 .

.The Adaptor Pattern • Using a deque to implement a stack or queue is an example of the adaptor pattern.Specialize the types of objects used by a general class. adaptor classes specialize general classes • Two such applications: . Adaptor patterns implement a class by using methods of another class • In general. Ex: implementing a stack with a deque. Queues and Linked Lists 11 . Ex: Deﬁning an IntegerArrayStack class that adapts ArrayStack to only store integers.Specialize a general class by changing some methods.

getNext() .getElement() .setPrev(Object newPrev) .Implementing Deques with Doubly Linked Lists • Deletions at the tail of a singly linked list cannot be done in constant time.getPrev() • By using a doubly linked list.setElement(Object e) . It supports the following methods: . • To implement a deque. all the methods of a deque run in O(1) time. header trailer Baltimore New York Providence • A node of a doubly linked list has a next and a prev link. we use a doubly linked list. Queues and Linked Lists 12 .setNext(Object newNext) . with special header and trailer nodes.