Download presentation
Presentation is loading. Please wait.
Published byBrianna Gonzalez Modified over 10 years ago
3
Queues Printer queues Several jobs submitted to printer Jobs form a queue Jobs processed in same order as they were received
4
Properties of queues First In First Out (FIFO) Data added at one end only (the Tail of the queue) Data removed at other end only (the Head of the queue)
5
Queue operations Initialise queue Add item (to tail of queue) Remove item (from head of queue) Check if queue empty Check if queue full
6
Queues using arrays Use array to store queue elements Define a data item Head which identifies the item at Head of queue Define a data item Tail which identifies the first empty location after last item in queue Tail identifies location where next item is placed in queue
7
Queues using arrays (first try) Head Tail Empty queue (Tail == Head)
8
Queues using arrays (first try) Head Tail Add item T at location Tail T
9
Queues using arrays (first try) Head Tail Add item H at location Tail TH
10
Queues using arrays (first try) Head Tail Add item I at location Tail THI
11
Queues using arrays (first try) Head Tail Remove item T from Head HI
12
Queues using arrays (first try) Head Tail Continue until Tail == ArraySize Queue full? AQUEUE
13
Queues using arrays (first try) Head Tail Must shift queue contents back to start of array - inefficient! AQUEUE
14
Circular Queue Use a circular queue Consider (perceive?) the array as a circular structure (i.e. as if the last element of the array is connected/joined to the first element of the array) The benefit of this insight is that we never have to shift data
15
A circular array 0 1 2 MaxSize - 1 MaxSize - 2 MaxSize - 3
16
A queue using a circular array MaxSize - 1 Tail Head Empty queue Tail == Head 0
17
A queue using a circular array T MaxSize - 1 Tail Head Add T at Tail Tail = (Tail + 1) % MaxSize 0
18
A queue using a circular array T H MaxSize - 1 Tail Head Add H at Tail Tail = (Tail +1) % MaxSize 0
19
A queue using a circular array T H MaxSize - 1 Tail Head Add I at Tail Tail = (Tail +1) % MaxSize 0 I
20
A queue using a circular array H MaxSize - 1 Tail Head Remove T from Head Head = (Head +1) % MaxSize 0 I
21
A queue using a circular array MaxSize - 1 Tail Head Continue until Tail == MaxSize - 1 0 E U E U Q A
22
A queue using a circular array MaxSize - 1 Tail Head 0 E U E U Q A Add Z at Tail Tail = (Tail +1) % MaxSize i.e. [(MaxSize - 1) + 1] % MaxSize = MaxSize % MaxSize = 0 Z
23
Empty and Full Queue Tests Empty queue condition: Head = = Tail Full queue condition: (Tail + 1) % MaxSize = = Head
24
Queue ADT in Java Constructor isempty isfull Join Leave
25
Constructor public QueueOfInts() {Queue = new int[10] ; Head = Tail = 0 ; } public QueueOfInts(int capacity) {Queue = new int[capacity] ; Head = Tail = 0 ; }
26
Test for empty queue public boolean isempty() { return Head == Tail) } }
27
Test for full queue public boolean isfull() { if ((Tail + 1) % Queue.length == Head) { return true; } else { return false; }
28
Adding an element public void Join(int val) {Queue[Tail] = val ; Tail = (Tail + 1) % Queue.length; }
29
Remove an element public int Leave() {int Removed ; Removed = Queue[Head]; Head = (Head + 1) % Queue.length ; return Removed ; }
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.