Queues - PowerPoint PPT Presentation

1 / 26
About This Presentation
Title:

Queues

Description:

Items can be removed only at one end (the front of the queue) ... Used in applications where reversal or 'unwinding' needed. Queues. Stacks. Interesting Application ... – PowerPoint PPT presentation

Number of Views:74
Avg rating:3.0/5.0
Slides: 27
Provided by: steve1791
Category:
Tags: queues | unwinding

less

Transcript and Presenter's Notes

Title: Queues


1
Queues
  • Chapter 5

2
Queue Definition
  • A queue is an ordered collection of data items
    such that
  • Items can be removed only at one end(the front
    of the queue)
  • Items can be added only at the other end(the
    back of the queue)

3
Basic Operations
  • construct a queue (usually empty)
  • empty Check if queue is empty
  • addQ Add an item to back of queue
  • front Retrieve element at front of queue
  • RemoveQ Remove element at front of queue

4
Queue FAQs
  • A queue is a FIFO structure First-In First-Out
  • Examples of queues
  • I/O buffers (stream of bytes from keyboard)
  • Scheduling queues in a multiuser OS
  • Printer queue

5
Scheduling Queues
  • Resident queue
  • on disk waiting formemory
  • Ready queue
  • in memory, onlyneeds CPU to run
  • Suspended queue
  • waiting for I/O transfer or to be reassigned to
    the CPU

6
Contrasting Stacks and Queues
Stacks Queues
LIFO Elements stored in reverse of order received Used in applications where reversal or "unwinding" needed FIFO Elements stored in same order as received Used where service rendered is relative to order received
7
Interesting Application Evaluate If A String Is
A Palindrome
This code will not do what it claims. Do a white
box test of the code.
8
Implementation with An Array
  • Requirements
  • Array space for storage for the data
  • A pointer to indicate the front of the queue
  • A pointer to indicate the back of the queue
  • Structures would includeitemType myQueue
    queueQuantityint myFront, myBack

9
Implementation with An Array
  • Additions to the queue
  • place new element where back points, increment
    myBack
  • Deletions from the queue
  • increment myFront
  • What problems can you see with this?

myQueue

10
Implementation with An Array
  • Obviously we would run out of space
  • Possible solutions
  • Shifting the array elements downward with each
    deletion
  • Viewing array as a circular buffer, i.e. wrapping
    the end to the front

11
"Circular" Array-Implementation
  • Wraparound keeps the addition/deletion cycle from
    walking off the edge of the array
  • Given itemType myQueue queueQuantityint
    myFront, myBack
  • When myBack (or myFront) hits the end of myQueue,
    it should wrap around to the beginningmyBback
    (myBack 1) queueQuantity

12
"Circular" Array-Implementation
  • Initially queue is emptymyFront myBack 0
  • How do we know queue is empty at any time??
  • myFront myBack
  • What would happen if array fills up what would
    be value of myFront and myBack?
  • they would be the same why?
  • So how to tell empty from full??

13
"Circular" Array-Implementation
  • Common solutions
  • Keep an empty slot between myFront and myBack
  • declare array asitemType myQueue queueQuantity
    1
  • Keep an auxiliary counter to track actual number
    of elements in queue

14
Queue Class Specification

ifndef QUEUE
Note again, capacity and element type declared
outside class.

define QUEUE
const
int QUEUE_CAPACITY 128
typedef
int
QueueElement
class Queue

/ Function Members /

public
Queue()
bool empty()
const
bool full() const
void
addQ(
const
QueueElement value)
QueueElement front
const
()
//nondestructive peek
QueueElement
removeQ() // retrieve and remove
/ Data Members /

private
QueueElement
myArray
QUEUE_CAPACITY
int
myFront,
myBack
//
end of class declaration

endif
15
Queue Class Implementation
  • Use the class declaration to write the
    implementation
  • Also write a driver to test the implementation
  • It should
  • instantiate multiple queues
  • test for empty, full
  • add, remove, and look at the front element
  • enter values from keyboard, from file
  • print output of queue to screen, to file

16
Linked List Implementation
  • Interface would remain the same
  • empty(), full(), front(), addQ(), removeQ()
  • The storage structure would be a linked list.
  • The markers would be pointers
  • instead of indices into an array
  • myFront contains pointer to first node
  • myBack contains pointer to last node

17
Linked List Implementation
  • empty
  • returns true if myFront points to NULL
  • addQ
  • allocates new node
  • link it off myBack
  • update myBack
  • removeQ
  • remove and return first element
  • update myFront

18
Linked List Implementation
  • front
  • returns value of node where myFront points to
  • full???
  • returns true if myFront myBack
  • Write specification and implementation as an
    exercise

19
Dequeue
  • Double-ended-queue
  • Similar to a queue
  • But additions and deletions can occur at
    either end
  • Methods must have
  • either a parameter specifying at which end the
    action should occur
  • or multiple methods (functions) provided

20
addQ( ) Example for Dequeue
Version with parameter for where addition takes
place
21
Multiple Method Version
void
Dequepush_front(
int item)

if ((
myBack 1)
QUEUE_CAPACITY
myFront)
cout ltlt "FULL, cannot add to queue." ltlt
endl
//
enqueue at front

else

if (!
myFront)
myFront
QUEUE_CAPACITY
else
myFront--
myArray
myFront item


return

void
Dequepush_back(
int item)


if ((
myBack 1)
QUEUE_CAPACITY
myFront)
cout ltlt "FULL, cannot add to queue." ltlt
endl
// regular
enqueuing

else

myArray
myBack item
myBack (
myBack 1)
QUEUE_CAPACITY


return

22
Multiple Methods for Removing
23
Comments on deque
  • A standard container provided by the STL
  • Easily implemented by the vector type
  • More coming in Chapter 6

24
Priority Queues
  • Definition A queue where the order of the
    elements
  • is by some priority
  • rather than by the order in which they are
    received
  • Any queue implementation can be used
  • Only the addQ() method must be altered
  • Element is not added at back
  • Queue must be scanned for correct location for
    insertion

25
Priority Queues
  • What would be the drawback of using an
    implementation that used arrays?
  • shifting elements
  • Hence a linked list implementation is preferred

26
Priority Queues
What changes would be made to this to use a
linked list version?
Write a Comment
User Comments (0)
About PowerShow.com