CSCE 210 Data Structures and Algorithms

Slides:



Advertisements
Similar presentations
Chapter 6 Queues and Deques.
Advertisements

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.
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.
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.
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.
Queues Chapter 8 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved
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.
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,
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Chapter 7: Queues Data Abstraction & Problem Solving with C++
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.
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 Queues Chapter 4. 2 Objectives You will be able to Describe a queue as an ADT. Build a dynamic array based implementation of a queue ADT.
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.
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.
Prof. Amr Goneid, AUC1 CSCE 210 Data Structures and Algorithms Prof. Amr Goneid AUC Part 2b. Simple Containers: The Queue.
CSCE 210 Data Structures and Algorithms
Review Array Array Elements Accessing array elements
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
Chapter 4 The easy stuff.
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.
Algorithms and Data Structures
Queues Chapter 8 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved
Monday, February 26, 2018 Announcements… For Today…
CMSC 341 Lecture 5 Stacks, Queues
Queues.
Queues.
Chapter 19: Stacks and Queues.
Queues.
CSC 143 Queues [Chapter 7].
CS210- Lecture 5 Jun 9, 2005 Agenda Queues
Pointers & Dynamic Data Structures
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:

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

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, AUC

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, AUC

An Illustration Prof. Amr Goneid, AUC

Demo Queue Animation Prof. Amr Goneid, AUC

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

2. Array Models Model 1: Variable Front and Rear Problem: Not possible to enqueue although there is space. n-1 Q F R Dequeue Enqueue Prof. Amr Goneid, AUC

Array Models 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) + …..+ 2 + 1 = n(n-1)/2 = O(n2) Too Expensive n-1 Q Dequeue Prof. Amr Goneid, AUC

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

The queue may be implemented as a dynamic array. 3. Array Based Queue ADT 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. Prof. Amr Goneid, AUC

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, AUC

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

A Queue Class Definition // 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" Prof. Amr Goneid, AUC

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

A Queue Class Implementation Implement the other member functions as in: http://www1.aucegypt.edu/faculty/cse/goneid/csci210/210 CE2.pdf Prof. Amr Goneid, AUC

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

A Driver Program to Test Class 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; } Prof. Amr Goneid, AUC

A Driver Program to Test Class bool palindrome(string w) { Stackt<char> s; Queuet<char> 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; } Prof. Amr Goneid, AUC

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

4. Linked Queues 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 Prof. Amr Goneid, AUC

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, AUC

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

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

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

Linked Queue Class 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 Prof. Amr Goneid, AUC

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

5. Simulation of a Waiting Line 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. Prof. Amr Goneid, AUC

Simulation of a Waiting Line 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… Prof. Amr Goneid, AUC

Simulation of a Waiting Line Notations: Tmax Maximum Simulation Time (fixed) t Clock Time = current time (0 ≤ t < Tmax) <Ta > Average time between two arrivals (fixed) Pa Probability of arrival per unit time = 1/ <Ta > Ts Service time (fixed) Tr Time remaining to start service ta Arrival time (random) Tw Wait time = t - ta Prof. Amr Goneid, AUC

Simulation of a Waiting Line Clock (t) Tw Tmax 1 2 3 ta t Service Starts Arrival ta ta dequeue enqueue Prof. Amr Goneid, AUC

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

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

Simulation of a Waiting Line 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); } Prof. Amr Goneid, AUC

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

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

Simulation of a Waiting Line 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 = 12 ............... Arrival# 28 at: 278 Job# 28 Service Started at: 278 wait = 0 Average wait Time is 2.89286 A possible tracing of the simulation program Prof. Amr Goneid, AUC

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