Data Structures Using C++1 Chapter 8 Queues. Data Structures Using C++2 Chapter Objectives Learn...
-
Upload
mavis-knight -
Category
Documents
-
view
224 -
download
1
Transcript of Data Structures Using C++1 Chapter 8 Queues. Data Structures Using C++2 Chapter Objectives Learn...
Data Structures Using C++ 2
Chapter Objectives
• Learn about queues
• Examine various queue operations
• Learn how to implement a queue as an array
• Learn how to implement a queue as a linked list
Data Structures Using C++ 3
Chapter Objectives
• Discover queue applications
• Examine the STL class queue
• Discover priority queues
Data Structures Using C++ 4
Queues
• Definition: data structure in which the elements are added at one end, called the rear, and deleted from the other end, called the front or first
• First In First Out (LIFO) data structure
Data Structures Using C++ 5
Basic Operations on a Queue
• initializeQueue: Initializes the queue to an empty state
• destroyQueue: Removes all the elements from the queue, leaving the queue empty
• isEmptyQueue: Checks whether the queue is empty. If the queue is empty, it returns the value true; otherwise, it returns the value false
Data Structures Using C++ 6
Basic Operations on a queue
• isFullQueue: Checks whether the queue is full. If the queue is full, it returns the value true; otherwise, it returns the value false
• front: Returns the front (first) element of the queue; the queue must exist
• back: Returns the front (first) element of the queue; the queue must exist
Data Structures Using C++ 7
Basic Operations on a queue
• addQueue: Adds a new element to the rear of the queue; the queue must exist and must not be full
• deleteQueue: Removes the front element of the queue; the queue must exist and must not be empty
Data Structures Using C++ 19
Initialize Queue
Definition of the function initializeQueue:
template<class Type>void queueType<Type>::initializeQueue(){ queueFront = 0; queueRear = maxQueueSize - 1; count = 0;}
Data Structures Using C++ 20
Empty Queue and Full Queue
template<class Type>
bool queueType<Type>::isEmptyQueue()
{
return (count == 0);
}
template<class Type>
bool queueType<Type>::isFullQueue()
{
return (count == maxQueueSize);
}
Data Structures Using C++ 21
Destroy Queue
template<class Type>
void queueType<Type>::destroyQueue()
{
queueFront = 0;
queueRear = maxQueueSize - 1;
count = 0;
}
Data Structures Using C++ 22
front and backtemplate<class Type>
Type queueType<Type>::front()
{
assert(!isEmptyQueue());
return list[queueFront];
}
template<class Type>Type queueType<Type>::back(){ assert(!isEmptyQueue()); return list[queueRear];}
Data Structures Using C++ 23
Add Queue
template<class Type>void queueType<Type>::addQueue(const Type& newElement){ if(!isFullQueue()) { queueRear = (queueRear + 1) % maxQueueSize; //use the mod //operator to advance queueRear //because the array is circular count++; list[queueRear] = newElement; } else cerr<<"Cannot add to a full queue."<<endl;}
Data Structures Using C++ 24
Delete Queue
template<class Type>void queueType<Type>::deleteQueue(){ if(!isEmptyQueue()) { count--; queueFront = (queueFront + 1) % maxQueueSize; //use the mod //operator to advance queueFront //because the array is circular } else cerr<<"Cannot remove from an empty queue."<<endl;}
Data Structures Using C++ 25
Constructor and Destructor
• Constructor – Creates an array of the size specified by the user
– Default value is 100
– Initializes queueFront queueRear to indicate that the queue is empty
• Destructor– When queue object goes out of scope, destructor reallocates
memory occupied by the array that stores the queue elements
Data Structures Using C++ 27
Empty, Full, and Destroy Queue
• Queue is empty if queueFront is NULL
• Queue is full only if we run out of memory
• Destroy queue removes all elements of the queue
Data Structures Using C++ 28
addQueue
• Adds a new element to the end of the queue
• Access the pointer queueRear to implement addQueue
Data Structures Using C++ 29
Front, Back, and Delete Queue
• If queue is nonempty:– operation front returns the first element of the queue
– operation back returns the last element of the queue
– operation deleteQueue removes the first element of the queue
• If queue is empty:– function front terminates the program
– function back terminates the program
Data Structures Using C++ 31
Priority Queue
• FIFO rules of a queue are relaxed
• Customers or jobs with higher priority are pushed to front of queue
• To implement:– use an ordinary linked list, which keeps the
items in order from the highest to lowest priority
– use a treelike structure
Data Structures Using C++ 37
Chapter Summary
• Queue Data Structure– Restricted Version of arrays and linked
list
– Basic operations
• First In First Out (FIFO)
• Queues Implemented as Arrays