Queue ADT Operations Enqueue, Dequeue, Peek, isEmpty Implementation: Circular Array (Weiss), Linked...
-
Upload
paxton-werry -
Category
Documents
-
view
222 -
download
1
Transcript of Queue ADT Operations Enqueue, Dequeue, Peek, isEmpty Implementation: Circular Array (Weiss), Linked...
Queue ADTOperations• Enqueue, Dequeue, Peek, isEmpty
Implementation: • Circular Array (Weiss),• Linked List,• Circular Array (text)
Application:
Level-Order Tree Traversal
Implementing a Queue
• Using Vector /Array – requires estimate of maximum queue length– may grow dynamically– Ø = empty slots– Can contain varied data/objects (not necessarily
homogeneous)
28-17 Golf #1 Ø Ø Ø212 rules!
rearfront
Implementing a Queue
• Using Linked List– flexible, adjusts to problem size– implementing a linked list
• nodes and references/links/pointers
front 212 rules!28-17 Ø
rear
Golf #1
Implementing a Queue
• Using Linked List– implementing a linked list
• cursor implementation
front = 5
freelist = 8
0
1
2
3
4
5
6
7
8
2
-1
7
-1
1
4
3
6
0
Golf #1
212 rules!
28-17
Ø
Ø
Ø
Ø
Ø
Ø
rear = 1
Implementing a Queue
Vector/Array Linked List
– enqueue O(1)* O(1)– dequeue O(1) O(1)– peek O(1) O(1)– isEmpty O(1) O(1)
*assuming no need for Vector/Array expansion
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
front = 0
rear = 0
Q
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
front = 0
rear = 0 1enqueue (“A”)
A
Q
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
front = 0
rear = 1 2enqueue (“B”)
A
B
Q
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
front = 0
rear = 2 3enqueue (“C”)
A
B
C
Q
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
front = 0 1
rear = 3dequeue()
// returns “A”
A
B
C
Q
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
front = 1 2
rear = 3dequeue()
// returns “B”
A
B
C
Q
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
front = 2 3
rear = 3dequeue()
// returns “C”
A
B
C
Q
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { } // isEmpty front = 3
rear = 3// Is the queue empty?// Complete isEmpty() method.
A
B
C
Q
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty front = 3
rear = 3 4enqueue(“D”);
A
B
C
Q
D
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty front = 3
rear = 4 5enqueue(“E”);
A
B
C
Q
DE
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty front = 3
rear = 5 6enqueue(“F”);
A
B
C
Q
F
DE
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty front = 3
rear = 6 7enqueue(“G”);
A
B
C
Q
F
DE
G
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty front = 3
rear = 7 0enqueue(“H”);
A
B
C
Q
F
DE
G
H
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty front = 3
rear = 0 1enqueue(“I”);
I
B
C
Q
F
DE
G
H
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty front = 3
rear = 1 2enqueue(“J”);
I
J
C
Q
F
DE
G
H
front = 3
rear = 2
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty
boolean isFull() { } // isFull
// Is the queue full?// Complete isFull() method.
I
J
C
Q
F
DE
G
H
front = 3 4
rear = 2
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty
boolean isFull() { return front==(rear+1)%Q.length;} // isFull
dequeue();// returns “D”
I
J
C
Q
F
DE
G
H
front = 4 5
rear = 2
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty
boolean isFull() { return front==(rear+1)%Q.length;} // isFull
dequeue();// returns “E”
I
J
C
Q
F
DE
G
H
front = 5
rear = 2
0 1
2
3
4
7
6
5
enqueue (Object item) { rear = (rear+1)%Q.length; if (front == rear) throw QueueFullException; Q[rear] = item;} // enqueue
Object dequeue() { if (front == rear) throw QueueEmptyException; front = (front+1)%Q.length; return Q[front];} // dequeue
boolean isEmpty() { return (front == rear); } // isEmpty
boolean isFull() { return front==(rear+1)%Q.length;} // isFull
// How many elements does the// queue have? Generalize.
I
J
C
Q
F
DE
G
H
B
D
A
E
I J K
M NL
F
H
C
G
levelOrder (Node root) { Queue q; q.enqueue (root); while (!q.isEmpty()) { Node n = (Node) q.dequeue(); visit(n); if (n.left() != null) q.enqueue(n.left()); if (n.right() != null) q.enqueue(n.right()); } // while} // levelOrder
q = Ø
output =
B
D
A
E
I J K
M NL
F
H
C
G
levelOrder (Node root) { Queue q; q.enqueue (root); while (!q.isEmpty()) { Node n = (Node) q.dequeue(); visit(n); if (n.left() != null) q.enqueue(n.left()); if (n.right() != null) q.enqueue(n.right()); } // while} // levelOrder
q A
output =
B
D
A
E
I J K
M NL
F
H
C
G
levelOrder (Node root) { Queue q; q.enqueue (root); while (!q.isEmpty()) { Node n = (Node) q.dequeue(); visit(n); if (n.left() != null) q.enqueue(n.left()); if (n.right() != null) q.enqueue(n.right()); } // while} // levelOrder
q B C
output = A
B
D
A
E
I J K
M NL
F
H
C
G
levelOrder (Node root) { Queue q; q.enqueue (root); while (!q.isEmpty()) { Node n = (Node) q.dequeue(); visit(n); if (n.left() != null) q.enqueue(n.left()); if (n.right() != null) q.enqueue(n.right()); } // while} // levelOrder
q C D E
output = A B