Prof. Amr Goneid, AUC1 CSCE 210 Data Structures and Algorithms Prof. Amr Goneid AUC Part 2b. Simple Containers: The Queue.

Slides:



Advertisements
Similar presentations
COSC 1P03 Data Structures and Abstraction 9.1 The Queue Whenever you are asked if you can do a job, tell 'em, "Certainly, I can!" Then get busy and find.
Advertisements

Queues CS 308 – Data Structures. What is a queue? It is an ordered group of homogeneous items of elements. Queues have two ends: –Elements are added at.
1 Queues – Chapter 3 A queue is a data structure in which all additions are made at one end called the rear of the queue and all deletions are made from.
CHAPTER 7 Queues.
Queues CS 3358 – Data Structures. What is a queue? It is an ordered group of homogeneous items of elements. Queues have two ends: – Elements are added.
What is a Queue? A queue is a FIFO “first in, first out” structure.
ADT Queue 1. What is a Queue? 2. STL Queue 3. Array Implementation of Queue 4. Linked List Implementation of Queue 5. Priority Queue.
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 18 Stacks.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 18: Stacks And Queues.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Introduction to Stacks & Queues.
Copyright © 2012 Pearson Education, Inc. Chapter 18: Stacks And Queues.
Queue Overview Queue ADT Basic operations of queue
Queue RIZWAN REHMAN CENTRE FOR COMPUTER STUDIES DIBRUGARH UNIVERSITY.
Doubly-Linked Lists Same basic functions operate on list Each node has a forward and backward link: What advantages does a doubly-linked list offer? 88.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
1 Queues CPS212 Gordon College. 2 Introduction to Queues A queue is a waiting line – seen in daily life –Real world examples – toll booths, bank, food.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 18: Stacks and.
1 Queues (Walls & Mirrors - Chapter 7). 2 Overview The ADT Queue Linked-List Implementation of a Queue Array Implementation of a Queue.
Prof. Amr Goneid, AUC1 CSCE 210 Data Structures and Algorithms Prof. Amr Goneid AUC Part 2b. Simple Containers: The Queue.
Prof. Amr Goneid, AUC1 Analysis & Design of Algorithms (CSCE 321) Prof. Amr Goneid Department of Computer Science, AUC Part R1. Elementary Data Structures.
DATA STRUCTURES AND ALGORITHMS Lecture Notes 4 Prepared by İnanç TAHRALI.
Copyright © 2012 Pearson Education, Inc. Chapter 18: Stacks And Queues.
1 Chapter 7 Stacks and Queues. 2 Stack ADT Recall that ADT is abstract data type, a set of data and a set of operations that act upon the data. In a stack,
Stack Overview. Stack Stack ADT Basic operations of stack – Pushing, popping etc. Implementations of stacks using – array – linked list.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 16. Linked Lists.
Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Chapter 18: Stacks and Queues.
Computer Science Department Data Structures and Algorithms Queues Lecture 5.
Prof. Amr Goneid, AUC1 CSCE 210 Data Structures and Algorithms Prof. Amr Goneid AUC Part 6. Dictionaries(3): Binary Search Trees.
Queues Chapter 5 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)
Prof. Amr Goneid, AUC1 Analysis & Design of Algorithms (CSCE 321) Prof. Amr Goneid Department of Computer Science, AUC Part R3. Priority Queues.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 15. Dictionaries (1): A Key Table Class.
1 Binary Search Trees. 2 Binary Search Trees Binary Search Trees The Binary Search Tree (BST) Search, Insertion and Traversal of BST Removal of nodes.
1 Data Structures and Algorithms Stack. 2 The Stack ADT Introduction to the Stack data structure Designing a Stack class using dynamic arrays Linked Stacks.
1 Data Structures and Algorithms Stack. 2 The Stack ADT Introduction to the Stack data structure Designing a Stack class using dynamic arrays Linked Stacks.
Prof. Amr Goneid, AUC1 CSCE 210 Data Structures and Algorithms Prof. Amr Goneid AUC Part 2a. Simple Containers: The Stack.
1 Data Structures and Algorithms Linked List. 2 Lists Lists The Linked List ADT Linked List The Linked List Class Definition Linked List Class implementation.
Copyright © 2015, 2012, 2009 Pearson Education, Inc., Publishing as Addison-Wesley All rights reserved. Chapter 18: Stacks and Queues.
© Oxford University Press All rights reserved. Data Structures Using C, 2e Reema Thareja.
1 Data Structures and Algorithms Queue. 2 The Queue ADT Introduction to the Queue data structure Designing a Queue class using dynamic arrays Linked Queues.
CSCE 210 Data Structures and Algorithms
Review Array Array Elements Accessing array elements
CSCE 210 Data Structures and Algorithms
CSCE 210 Data Structures and Algorithms
Data Structures Using C++ 2E
18 Chapter Stacks and Queues
CS505 Data Structures and Algorithms
Chapter 18: Stacks and Queues.
More on Linked Lists, Stacks, and Queues
CSCE 210 Data Structures and Algorithms
CC 215 Data Structures Queue ADT
Queues.
CENG 213 Data Structure Queue 7/2/2018.
Lectures Queues Chapter 8 of textbook 1. Concepts of queue
Queues Queues Queues.
Queues Chapter 8 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved
CMSC 341 Lecture 5 Stacks, Queues
Queues.
Queues.
Chapter 19: Stacks and Queues.
Queues.
Queues 11/22/2018 6:47 AM 5.2 Queues Queues Dr Zeinab Eid.
CSC 143 Queues [Chapter 7].
CS210- Lecture 5 Jun 9, 2005 Agenda Queues
CE 221 Data Structures and Algorithms
Using a Queue Chapter 8 introduces the queue data type.
Queues.
Using a Queue Chapter 8 introduces the queue data type.
Queues Definition of a Queue Examples of Queues
Getting queues right … finally (?)
Data Structures & Programming
Presentation transcript:

Prof. Amr Goneid, AUC1 CSCE 210 Data Structures and Algorithms Prof. Amr Goneid AUC Part 2b. Simple Containers: The Queue

Prof. Amr Goneid, AUC2 The Queue ADT Introduction to the Queue data structure Array Models Array Based Queue ADT Linked Queues Simulation of a Waiting Line

Prof. Amr Goneid, AUC3 1. introduction to the Queue Data Structure  A simple data container consisting of a linear list of elements  Access is by position (order of insertion)  Insertions at one end (rear), deletions at another end (front)  First In First Out (FIFO) structure  Two basic operations: enqueue: add to rear, complexity is O(1) dequeue: remove from front, complexity is O(1)

Prof. Amr Goneid, AUC4 An Illustration

Prof. Amr Goneid, AUC5 mukundan/dsal/QueueAppl.htmlDemo

Prof. Amr Goneid, AUC6 Simulation of waiting lines Simulation of serviceable events Job scheduling Input/Output Buffering Multiprogramming Some Queue Applications

Prof. Amr Goneid, AUC7 Model 1: Variable Front and Rear Problem: Not possible to enqueue although there is space. 2. Array Models 0 n-1 QFR Dequeue FR FR Enqueue FR FR

Prof. Amr Goneid, AUC8 Model 2: Fixed Front, variable Rear Problem: To empty a queue of n elements we have to shift the elements to the left each time we dequeue. Total number of shifts = (n-1) + (n-2) + … = n(n-1)/2 = O(n 2 ) Too Expensive Array Models 0 n-1 Q Dequeue

Prof. Amr Goneid, AUC9 Array Models Model 3: Ring Model o The queue is viewed as a circular array o When last array element is reached, we move back to start o To enqueue: rear = (rear + 1) % size o To dequeue: front = (front + 1) % size o Both rear and front advance clockwise o Keep a count of the number of elements in the queue o Initially, the queue is empty: front = 1rear = 0 count = 0 No need to do any shifts !

Prof. Amr Goneid, AUC10 The queue may be implemented as a dynamic array. The capacity (MaxSize) will be input as a parameter to the constructor (default is 128) The queue ADT will be implemented as a template class to allow for different element types. 3. Array Based Queue ADT

Prof. Amr Goneid, AUC11 Queue Class Operations construct: construct an empty queue queueIsEmpty  bool : return True if queue is empty queueIsFull  bool : return True if queue is full enqueue(el) : add element (el) at the rear dequeue(el): retrieve and remove the front element queueFront(el): retrieve front without removing it queueRear(el): retrieve rear without removing it queueLength  int : return the current queue length

Prof. Amr Goneid, AUC12 // File: Queuet.h // Queue template class definition // Dynamic array implementation #ifndef QUEUET_H #define QUEUET_H template class Queuet { public: Queuet (int nelements = 128);// Constructor ~Queuet ();// Destructor A Queue Class Definition

Prof. Amr Goneid, AUC13 // Member Functions void enqueue(Type );// Add to rear void dequeue(Type &);// Remove from front void queueFront(Type &) const;// Retrieve front void queueRear(Type &) const;// Retrieve rear bool queueIsEmpty() const;// Test for Empty queue bool queueIsFull() const;// Test for Full queue int queueLength() const;// Queue Length private: Type *queue;// pointer to dynamic array int front, rear, count, MaxSize; }; #endif // QUEUET_H #include "Queuet.cpp" A Queue Class Definition

Prof. Amr Goneid, AUC14 // File: Queuet.cpp // Queue template class implementation #include using namespace std; // Constructor with argument, size is nelements, default is 128 template Queuet ::Queuet(int nelements) { MaxSize = nelements; queue = new Type[MaxSize]; front = 1; rear = 0; count = 0; } A Queue Class Implementation

Prof. Amr Goneid, AUC15 Implement the other member functions as in: CE2.pdf A Queue Class Implementation

Prof. Amr Goneid, AUC16 // File: QueuetAppl.cpp // Test if a string is a palindrome #include using namespace std; #include "Stackt.h" #include "Queuet.h" bool palindrome(string w); A Driver Program to Test Class

Prof. Amr Goneid, AUC17 int main() { string w; cout << "Enter a string:" << endl; getline(cin,w); cout << w << endl; if (palindrome(w)) cout << "Palindrome" << endl; else cout << "NOT Palindrome" << endl; return 0; } A Driver Program to Test Class

Prof. Amr Goneid, AUC18 bool palindrome(string w) { Stackt s; Queuet q; int L = w.length(); char c,v; for (int i = 0; i < L; i++) { c = w.at(i); s.push(c); q.enqueue(c); } while(!q.queueIsEmpty()) { q.dequeue(c); s.pop(v); if(c != v) return false; } return true; } A Driver Program to Test Class

Prof. Amr Goneid, AUC19 Output: Enter a string: Palindrome Press any key to continue Enter a string: NOT Palindrome Press any key to continue A Driver Program to Test Class

Prof. Amr Goneid, AUC20 A Queue can be implemented as a linked structure. Requires more space than array implementations, but more flexible in size. Two pointers are needed: front for dequeue and rear for enqueue 4. Linked Queues

Prof. Amr Goneid, AUC21 Node Specification // The linked structure for a node can be // specified as a Class in the private part of // the main queue class. class node// Hidden from user { public: Type e;// stack element node *next;// pointer to next node }; // end of class node declaration typedef node * NodePointer; NodePointer front, rear;// pointers

Prof. Amr Goneid, AUC22 Enqueue Operation pnew New enqueue(v): NodePointer pnew = new node; pnew->e = v; pnew->next = NULL; rear->next = pnew; rear = pnew; rear front

Prof. Amr Goneid, AUC23 Dequeue Operation 2 3 cursor front dequeue(v): v = front->e; cursor = front; front = front->next; delete cursor; 1 rear

Prof. Amr Goneid, AUC24 // File: QueueL.h // Linked List Queue class definition #ifndef QUEUEL_H #define QUEUEL_H template class QueueL { public: QueueL(); // Constructor ~QueueL(); // Destructor void enqueue(Type ); // Add to rear Linked Queue Class

Prof. Amr Goneid, AUC25 void dequeue(Type &); // Remove from front void queueFront(Type &) const;// retrieve front bool queueIsEmpty() const;// Test for Empty queue int queueLength() const;// Queue Length private: // Node Class class node { public: Type e;// queue element node *next;// pointer to next node }; // end of class node declaration Linked Queue Class

Prof. Amr Goneid, AUC26 typedef node * NodePointer; NodePointer front, rear;// Pointers int count;// length }; #endif // QUEUEL_H #include "QueueL.cpp" Linked Queue Class

Prof. Amr Goneid, AUC27 Queues can simulate waiting lines A waiting line is a queue of jobs waiting to be served by a server on FCFS (First Come First Serve) basis. 5. Simulation of a Waiting Line

Prof. Amr Goneid, AUC28 Time of arrival of a job is essentially random, but with a fixed probability per unit time. A clock registers arrival time, the simulation is Time-Driven Simulation tries to answer the question: What happens if… Simulation of a Waiting Line

Prof. Amr Goneid, AUC29 Notations: T max Maximum Simulation Time (fixed) tClock Time = current time (0 ≤ t < T max ) Average time between two arrivals (fixed) P a Probability of arrival per unit time = 1/ T s Service time (fixed) T r Time remaining to start service t a Arrival time (random) T w Wait time = t - t a Simulation of a Waiting Line

Prof. Amr Goneid, AUC30 Clock (t) Simulation of a Waiting Line 0123tata t T max Arrival Service Starts tata tata enqueue dequeue TwTw

Prof. Amr Goneid, AUC31 Algorithm Set T max,, T s and compute P a = 1/ Initialize waiting line and clock t = 0 set T r = 0 while (t < T max ) { Test for arrival. If job arrived, process arrival. Test for server ready. If ready, exit line and start service. If (T r > 0) decrement T r Increment clock time t } Compute average wait time Simulation of a Waiting Line

Prof. Amr Goneid, AUC32 Test for Arrival & Arrival Processing arrival (Q) { Generate Random number (R) between 0 and 1.0 if ( R < P a ) // job arrived if (Q.queueIsFull()) report error: Line is full else { t a = t ; Q.enqueue (t a ); } } Simulation of a Waiting Line

Prof. Amr Goneid, AUC33 Test for server ready. If ready, exit line and start service. if((Tr is 0) and (not Q.queueIsEmpty())) { exitLine; start service (set Tr = Ts); } Simulation of a Waiting Line

Prof. Amr Goneid, AUC34 Exit Line exitLine (Q) { if ( Q.queueIsEmpty()) Report: Line is Empty else { Q.dequeue (t a ); T w = t – t a ; // wait time waitTotal = waitTotal + T w ; // Total wait time jobcount = jobcount + 1;// jobs serviced } Simulation of a Waiting Line

Prof. Amr Goneid, AUC35 Compute average wait time averagewait (Q) { if ( jobcount is 0) return 0; else return (waitTotal / jobcount); } Simulation of a Waiting Line

Prof. Amr Goneid, AUC36 Arrival# 5 at: 31 Job# 4 Service Started at: 33 wait = 9 Job# 5 Service Started at: 39 wait = 8 Arrival# 6 at: 46 Job# 6 Service Started at: 46 wait = 0 Arrival# 7 at: 48 Arrival# 8 at: 50 Arrival# 9 at: 52 Job# 7 Service Started at: 52 wait = 4 Job# 8 Service Started at: 58 wait = 8 Arrival# 10 at: 64 Job# 9 Service Started at: 64 wait = Arrival# 28 at: 278 Job# 28 Service Started at: 278 wait = 0 Average wait Time is Simulation of a Waiting Line A possible tracing of the simulation program

Prof. Amr Goneid, AUC37 Learn on your own about: Using Queues in buffering and scheduling The Deque (Double-Ended Queue) container