390 likes | 892 Views
Chapter 8. Queues. 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. Chapter Objectives. Discover queue applications Examine the STL class queue Discover priority queues.
E N D
Chapter 8 Queues Data Structures Using C++
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++
Chapter Objectives • Discover queue applications • Examine the STL class queue • Discover priority queues Data Structures Using C++
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++
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++
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++
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++
Queues as Arrays Data Structures Using C++
Queues as Arrays Data Structures Using C++
Circle Queue Data Structures Using C++
Queues as Arrays Data Structures Using C++
Queues as Arrays Data Structures Using C++
Queues as Arrays Data Structures Using C++
Queues as Arrays Data Structures Using C++
Queues as Arrays Data Structures Using C++
Queues as Arrays Data Structures Using C++
Queues as Arrays Data Structures Using C++
UML Diagram of theclass queueType Data Structures Using C++
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++
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++
Destroy Queue template<class Type> void queueType<Type>::destroyQueue() { queueFront = 0; queueRear = maxQueueSize - 1; count = 0; } Data Structures Using C++
front and back template<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++
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++
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++
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++
Linked Queue as an ADT Data Structures Using C++
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++
addQueue • Adds a new element to the end of the queue • Access the pointer queueRear to implement addQueue Data Structures Using C++
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++
STL class queue (Queue Container Adapter) Data Structures Using C++
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++
Application of Queues Data Structures Using C++
Application of Queues Data Structures Using C++
Application of Queues Data Structures Using C++
Application of Queues: waitingCustomerQueueType Data Structures Using C++
Poisson Distribution Data Structures Using C++
Chapter Summary • Queue Data Structure • Restricted Version of arrays and linked list • Basic operations • First In First Out (FIFO) • Queues Implemented as Arrays Data Structures Using C++
Chapter Summary • Queues Implemented as Linked Lists • STL class queue • Priority Queues • Application of Queues Data Structures Using C++