Download presentation
Presentation is loading. Please wait.
1
Queues
2
What is a queue? First-in first-out data structure (FIFO) New objects are placed at rear Removal restricted to front Examples?
3
Queue ADT Operations enqueue(o): Insert o at rear of queue –Input: Object; Output: None dequeue(): Remove object at front; error if empty –Input: None; Output: Object removed size(): Return number of objects in queue –Input: None; Output: Integer isEmpty(): Return a boolean indicating queue empty –Input: None; Output: Boolean first(): Return object at front without removing; error if empty –Input: None; Output: Object
4
Example enqueue(5) enqueue(3) dequeue() enqueue(7) dequeue() front() dequeue() isEmpty() enqueue(9) enqueue(7) size() enqueue(3) enqueue(5) dequeue()
5
Queue Interface int size() const; bool isEmpty() const; Object& front() throw (QueueEmptyException); void enqueue(const Object& obj); Object dequeue() throw(QueueEmptyException);
6
Underlying Representation Array versus Linked List –Pros and cons? Running time? –size –isEmpty –enqueue –dequeue –front
7
Array Implementation 0123456…n-1 53 0123456… enqueue(5) enqueue(3) dequeue() ?
8
Array Implementation 0123456…n-1 53 0123456… enqueue(5) enqueue(3) dequeue() ? 3 0123456…n-1
9
Circular Array f – stores index of cell which stores first element of queue r – stores index of next available cell in queue Initially, f = r = 0 How do you add a new element? How do you remove an element? 0123456…n-1 fr
10
Circular Array How do you add a new element? –insert at array[r] –increment r How do you remove an element? –return array[f] –increment f What happens when r >= n-1? 0123456…n-1 fr
11
Circular Array Need to be able to wrap around Modulo – % –increment f using (f+1)%n –increment r using (r+1)%n 0123456…n-1 fr
12
Circular Array 012 f r 012 f r 012 f r 012 f r 012 f enqueue dequeue enqueue r =(2+1)%3= 0
13
Algorithms size –return (N-f+r) mod N isEmpty –return (f == r) front –if isEmpty then throw QueueEmptyException –return array[f] dequeue –if isEmpty then throw QueueEmptyException –temp = array[f] –f = (f+1)%N –return temp enqueue –if size == N-1 then throw QueueFullException SIZE MUST BE < N-1 –array[r] = object –r = (r+1)%N
14
Linked List Implementation enqueue dequeue Ø head tail
15
Linked List Implementation enqueue –if(size == 0) head = new_node –else tail->next_ptr = new_node –tail = new_node –increment size Object next_ptr new_nodehead tail
16
Linked List Implementation enqueue –if(size == 0) head = new_node –else tail->next_ptr = new_node –tail = new_node –increment size Object1 next_ptr new_nodehead tail Object2 next_ptr
17
Linked List Implementation dequeue –if (isEmpty) throw QueueEmptyException –head = head->next_ptr –decrement size –if new size is 0 – set tail to NULL
18
Deque Double-ended queue –insertFirst –insertLast –removeFirst –removeLast –first –last –size –isEmpty
19
Example insertFirst(3) insertFirst(5) first() removeFirst() insertLast(7) last() removeFirst() removeLast()
20
Doubly Linked List Algorithms –insertFirst –removeLast Object3 prev_ptr next_ptr trailer Object2 prev_ptr next_ptr Object1 prev_ptr next_ptr header
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.