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

© 2020 SlidePlayer.com Inc.

All rights reserved.

To make this website work, we log user data and share it with processors. To use this website, you must agree to our Privacy Policy, including cookie policy.

Ads by Google