Queue, Deque, and Priority Queue Implementations - PowerPoint PPT Presentation

1 / 33
About This Presentation
Title:

Queue, Deque, and Priority Queue Implementations

Description:

First location follows last one. Use modulo arithmetic on indices ... Array with One Unused Location. Fig. 23-8 A seven-location circular array that contains at ... – PowerPoint PPT presentation

Number of Views:428
Avg rating:3.0/5.0
Slides: 34
Provided by: steve1789
Category:

less

Transcript and Presenter's Notes

Title: Queue, Deque, and Priority Queue Implementations


1
Queue, Deque, and Priority Queue Implementations
  • Chapter 23

2
Chapter Contents
  • Linked List Implementation of a Queue
  • Array-Based Implementation of a Queue
  • Circular Array
  • Circular Array with One Unused Location
  • Vector-Based Implementation of a Queue
  • Circular Linked Implementations of a Queue
  • Two-Part Circular Linked Chain
  • Doubly Linked Implementation of a Queue
  • Possible Implementations of a Priority Queue

3
A Linked Implementation of a Queue
  • Use chain of linked nodes for the queue
  • Two ends at opposite ends of chain
  • Accessing last node inefficient
  • Could keep a reference to the tail of the chain
  • Place front of queue at beginning of chain
  • Place back of queue at end of chain
  • With references to both

4
A Linked Implementation of a Queue
Front of queue
Back of queue
Fig. 23-1 A chain of linked nodes that implements
a queue.
5
A Linked Implementation of a Queue
Fig. 23-2 (a) Before adding a new node to an
empty chain (b) after adding to it.
6
A Linked Implementation of a Queue
Fig. 23-3 (a) Before adding a new node to the end
of a chain (b) after adding it.
7
A Linked Implementation of a Queue
Fig. 23-4 (a) A queue of more than one entry (b)
after removing the queue's front.
8
A Linked Implementation of a Queue
Fig. 23-5 (a) A queue of one entry (b) after
removing the queue's front.
9
Array-Based Implementation of a Queue
  • Let queue0 be the front
  • frontIndex, backIndex are indices of front and
    back
  • If we insist queue0 is front
  • Must shift entries when we remove the front
  • Instead move frontIndex
  • Problem then is array can become full
  • But now beginning of array could be empty and
    available for use

10
Array-Based Implementation of a Queue
Fig. 23-6 An array that represents a queue
without shifting its entries (a) initially (b)
after removing the front twice
11
Array-Based Implementation of a Queue
Fig. 23-6 An array that represents a queue
without shifting its entries (c) after several
more additions removals (d) after two
additions that wrap around to the beginning of
the array
12
A Circular Array
  • When queue reaches end of array
  • Add subsequent entries to beginning
  • Array behaves as though it were circular
  • First location follows last one
  • Use modulo arithmetic on indicesbackIndex
    (backIndex 1) queue.length
  • Note with circular array frontIndex
    backIndex 1both when queue is empty and when
    full

13
A Circular Array
Fig. 23-7 A circular array that represents a
queue (a) when full (b) after removing 2
entries (c) after removing 3 more entries
14
A Circular Array
Fig. 23-7 A circular array that represents a
queue (d) after removing all but one entry
(e) after removing remaining entry.
15
A Circular Array with One Unused Location
Allows us to distinguish between empty and full
queue
Fig. 23-8 A seven-location circular array that
contains at most six entries of a queue
continued ?
16
A Circular Array with One Unused Location
Fig. 23-8 (ctd.) A seven-location circular array
that contains at most six entries of a queue.
17
Array-Based Implementation of a Queue
Fig. 23-9 An array-base queue (a) initially (b)
after removing its front by incrementing
frontIndex (sloppy)
18
Array-Based Implementation of a Queue
Fig. 23-9 An array-base queue (c) after removing
its front by setting queuefrontIndex to null
(clean) and then incrementing frontIndex.
19
Vector-Based Implementation of a Queue
  • Keep front of queue at beginning of vector
  • Use addElement to add entry at back
  • Vector expands as necessary
  • When removing front element, remaining elements
    move so new front is at beginning of vector
  • Indexes at front and back not needed

20
Vector-Based Implementation of a Queue
Fig. 23-10 A vector that represents a queue.
21
Circular Linked Implementations of a Queue
  • Last node references first node
  • Now we have a single reference to last node
  • And still locate first node quickly
  • No node contains a null
  • When a class uses circular linked chain for queue
  • Only one data item in the class
  • The reference to the chain's last node

22
Circular Linked Implementations of a Queue
Fig. 23-11 A circular linked chain with an
external reference to its last node that (a) has
more than one node (b) has one node (c) is
empty.
23
A Two-Part Linked Chain
  • Linked nodes that form the queue followed by
    nodes available for use in the queue
  • queueNode references front of queue node
  • freeNode references first available node
    following end of queue
  • In essence we have two chains
  • One for the queue
  • One for available nodes
  • All joined in a circle

24
A Two-Part Linked Chain
Fig. 32-12 A two-part circular linked chain that
represents both a queue and the nodes available
to the queue.
25
A Two-Part Linked Chain
queueNode is the front
Fig. 32-13 A two-part circular linked chain that
represents a queue (a) when it is empty (b)
after adding one entry (c) after adding three
more entries.
26
A Two-Part Linked Chain
Fig. 32-13 A two-part circular linked chain that
represents a queue (d) after removing the front
(e) after adding one more entry
27
A Two-Part Linked Chain
Fig. 32-14 A chain that requires a new node for
an addition to a queue (a) before the addition
(b) after the addition.
28
A Two-Part Linked Chain
Fig. 32-15 A chain with a node available for an
addition to a queue (a) before the addition (b)
after the addition.
29
Doubly Linked Implementation of Deque
  • Chain with head reference enables reference to
    first and then rest of the nodes
  • Tail reference allows reference to last node but
    not next-to-last
  • We need nodes that can reference both
  • Previous node
  • Next node
  • Thus the doubly linked chain

30
A Doubly Linked Implementation of a Deque
Fig. 23-16 A doubly linked chain with head and
tail references
31
A Doubly Linked Implementation of a Deque
Fig. 23-17 Adding to the back of a non empty
deque (a) after the new node is allocated (b)
after the addition is complete.
32
A Doubly Linked Implementation of a Deque
Fig. 23-18 (a) a deque containing at least two
entries (b) after removing first node and
obtaining reference to the deque's first entry.
33
Possible Implementations of a Priority Queue
Fig. 23-19 Two possible implementations of a
priority queue using (a) an array (b) a chain of
linked nodes.
Write a Comment
User Comments (0)
About PowerShow.com