Presentation is loading. Please wait.

Presentation is loading. Please wait.

Queues. What is a queue? First-in first-out data structure (FIFO) New objects are placed at rear Removal restricted to front Examples?

Similar presentations


Presentation on theme: "Queues. What is a queue? First-in first-out data structure (FIFO) New objects are placed at rear Removal restricted to front Examples?"— Presentation transcript:

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


Download ppt "Queues. What is a queue? First-in first-out data structure (FIFO) New objects are placed at rear Removal restricted to front Examples?"

Similar presentations


Ads by Google