1 / 18

Queues

Queues. What is a queue?. First-in first-out data structure (FIFO) New objects are placed at rear Removal restricted to front Examples?. Queue ADT Operations. enqueue (o): Insert o at rear of queue Input: Object; Output: None dequeue (): Remove object at front; error if empty

Download Presentation

Queues

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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. enqueue(5) enqueue(3) dequeue() enqueue(7) dequeue() front() dequeue() dequeue() isEmpty() enqueue(9) enqueue(7) size() enqueue(3) enqueue(5) dequeue() Example

  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 0 1 2 3 4 5 6 … n-1 enqueue(5) enqueue(3) 5 3 0 1 2 3 4 5 6 … n-1 dequeue() ?

  8. Array Implementation 0 1 2 3 4 5 6 … n-1 enqueue(5) enqueue(3) 5 3 0 1 2 3 4 5 6 … n-1 3 dequeue() ? 0 1 2 3 4 5 6 … n-1

  9. Circular Array f r • 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? 0 1 2 3 4 5 6 … n-1

  10. Circular Array f r • 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? 0 1 2 3 4 5 6 … n-1

  11. Circular Array r f • Need to be able to wrap around • Modulo – % • increment f using (f+1)%n • increment r using (r+1)%n 0 1 2 3 4 5 6 … n-1

  12. Circular Array f r f dequeue 0 1 2 0 1 2 f r r f r =(2+1)%3= 0 enqueue enqueue 0 1 2 0 1 2 f r enqueue 0 1 2

  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 tail • enqueue • dequeue Ø head

  15. Linked List Implementation new_node head tail • enqueue • if(size == 0) head = new_node • else tail->next_ptr = new_node • tail = new_node • increment size Object next_ptr

  16. Linked List Implementation new_node head tail • enqueue • if(size == 0) head = new_node • else tail->next_ptr = new_node • tail = new_node • increment size Object1 Object2 next_ptr 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. Exercises • Implement a queue using two stacks • Implement a two-color stack

More Related