Queues Definition of a Queue Examples of Queues

Slides:



Advertisements
Similar presentations
Data Structures Lecture 13: QUEUES Azhar Maqsood NUST Institute of Information Technology (NIIT)
Advertisements

Queues A waiting line that grows by adding elements to its end and shrinks by taking elements from its front Line at the grocery store Cars in traffic.
Review of Stacks and Queues Dr. Yingwu Zhu. Our Focus Only link-list based implementation of Stack class Won’t talk about different implementations of.
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.
Stacks, Queues, and Deques. 2 A stack is a last in, first out (LIFO) data structure Items are removed from a stack in the reverse order from the way they.
Data Structure (Part I) Stacks and Queues. Introduction to Stack An stack is a ordered list in which insertion and deletions are made at one end. –The.
Queues CS-212 Dick Steflik. Queues First In, First Out operation – FIFO As items are added they are chronologically ordered, items are removed in their.
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.
DATA STRUCTURE Presented By: Mahmoud Rafeek Alfarra Using C# MINISTRY OF EDUCATION & HIGHER EDUCATION COLLEGE OF SCIENCE AND TECHNOLOGY KHANYOUNIS- PALESTINE.
Queue Overview Queue ADT Basic operations of queue
Queue RIZWAN REHMAN CENTRE FOR COMPUTER STUDIES DIBRUGARH UNIVERSITY.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
Stacks and Queues COMP171 Fall Stack and Queue / Slide 2 Stack Overview * Stack ADT * Basic operations of stack n Pushing, popping etc. * Implementations.
Queues CS-240 & CS-341 Dick Steflik. Queues First In, First Out operation - FIFO As items are added they are chronologically ordered, items are removed.
Queues CS-240 & CS-341 Dick Steflik. Queues First In, First Out operation - FIFO As items are added they are chronologically ordered, items are removed.
Queues CS-240 & CS-341 Dick Steflik. Queues First In, First Out operation – FIFO As items are added they are chronologically ordered, items are removed.
1 Stack Data : a collection of homogeneous elements arranged in a sequence. Only the first element may be accessed Main Operations: Push : insert an element.
1 Queues (Walls & Mirrors - Chapter 7). 2 Overview The ADT Queue Linked-List Implementation of a Queue Array Implementation of a Queue.
CSE 373 Data Structures and Algorithms Lecture 2: Queues.
Data Structures - Queues
1 C++ Classes and Data Structures Jeffrey S. Childs Chapter 8 Stacks and Queues Jeffrey S. Childs Clarion University of PA © 2008, Prentice Hall.
CS 1031 Queues Definition of a Queue Examples of Queues Design of a Queue Class Different Implementations of the Queue Class.
DATA STRUCTURES AND ALGORITHMS Lecture Notes 4 Prepared by İnanç TAHRALI.
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,
1 Stacks and Queues Based on D.S. Malik, Java Programming: Program Design Including Data Structures.
1 Data Structures - Part II CS215 Lecture #8. Stacks  Last-In-First-Out (LIFO)  Stacks are often used in programming when data will need to be used.
1 Linked-list, stack and queue. 2 Outline Abstract Data Type (ADT)‏ Linked list Stack Queue.
Computer Science Department Data Structures and Algorithms Queues Lecture 5.
UNIT II Queue. Syllabus Contents Concept of queue as ADT Implementation using linked and sequential organization. – linear – circular queue Concept –
CE 221 Data Structures and Algorithms
CSE 373: Data Structures and Algorithms Lecture 2: Queues.
1 Joe Meehean. 2  empty is the queue empty  size  enqueue (add) add item to end of queue  dequeue (remove) remove and return item at front of queue.
Give Eg:? Queues. Introduction DEFINITION: A Queue is an ordered collection of element in which insertions are made at one end and deletions are made.
Queues CS 367 – Introduction to Data Structures. Queue A queue is a data structure that stores data in such a way that the last piece of data stored,
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.
Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI 240 Abstract Data Types Queues Dale Roberts, Lecturer
Review Array Array Elements Accessing array elements
Unit-3 Queues-operations, array and linked representations. Circular Queue operations, Dequeues, applications of queue.
CS505 Data Structures and Algorithms
UNIT II Queue.
CC 215 Data Structures Queue ADT
CSE 373: Data Structures and Algorithms
Queue.
Stacks and Queues.
Queues Queues Queues.
Stack and Queue APURBO DATTA.
Priority Queue.
Stacks Stack: restricted variant of list
CMSC 341 Lecture 5 Stacks, Queues
Queues 11/9/2018 6:28 PM Queues 11/9/2018 6:28 PM Queues.
Queue, Deque, and Priority Queue Implementations
Queue, Deque, and Priority Queue Implementations
Queues.
Queues 11/16/2018 4:18 AM Queues 11/16/2018 4:18 AM Queues.
Queues 11/16/2018 4:19 AM Queues 11/16/2018 4:19 AM Queues.
Queues.
CSC 143 Queues [Chapter 7].
18.5 Linked Queues Like a stack, a queue can be implemented using pointers and nodes Allows dynamic sizing, avoids issue of wrapping indices NULL front.
Queues 12/30/2018 9:24 PM Queues 12/30/2018 9:24 PM Queues.
CS210- Lecture 5 Jun 9, 2005 Agenda Queues
Queues Jyh-Shing Roger Jang (張智星)
ADT Queue (Array Implementation)
CE 221 Data Structures and Algorithms
Using a Queue Chapter 8 introduces the queue data type.
Using a Queue Chapter 8 introduces the queue data type.
Stacks, Queues, and Deques
Getting queues right … finally (?)
Queues The content for these slides was originally created by Gerard Harrison. Ported to C# by Mike Panitz.
Data Structures & Programming
Presentation transcript:

Queues Definition of a Queue Examples of Queues Design of a Queue Class Different Implementations of the Queue Class CS 103

Definition of a Queue A queue is a data structure that models/enforces the first-come first-serve order, or equivalently the first-in first-out (FIFO) order. That is, the element that is inserted first into the queue will be the element that will deleted first, and the element that is inserted last is deleted last. A waiting line is a good real-life example of a queue. (In fact, the Britich word for “line” is “queue”.) CS 103

A Graphic Model of a Queue Head: All items are deleted from this end Tail: All new items are added on this end CS 103

Operations on Queues Insert(item): (also called enqueue) It adds a new item to the tail of the queue Remove( ): (also called delete or dequeue) It deletes the head item of the queue, and returns to the caller. If the queue is already empty, this operation returns NULL getHead( ): Returns the value in the head element of the queue getTail( ): Returns the value in the tail element of the queue isEmpty( ) Returns true if the queue has no items size( ) Returns the number of items in the queue CS 103

Examples of Queues An electronic mailbox is a queue The ordering is chronological (by arrival time) A waiting line in a store, at a service counter, on a one-lane road Equal-priority processes waiting to run on a processor in a computer system CS 103

Queue as a Class Much like stacks and linked lists were designed and implemented as classes, a queue can be conveniently packaged as a class It seems natural to think of a queue as similar to a linked list, but with more basic operations, to enforce the FIFO order of insertion and deletion CS 103

A Rough Class for Queue class Queue{ public: typedef int datatype; // datatype is the type of items to be //added to the queue. By changing int to some other type, the // queue is easily changed to handle other data types Queue( ); void enqueue(datatype x); datatype dequeue( ); datatype peekHead( ); datatype peekTail( ); int size( ); bool isEmpty( ); private: //A container for items. It’s determined in the implementation }; CS 103

A Linked List Implementation of the Queue Class The container for items is a linked list, that is, an object of type List Let’s call it: List q; CS 103

A Class for Queue: A Linked List Implementation class Queue{ public: typedef int datatype; Queue( ) { }; void enqueue(datatype x) {q.insertTail(x);}; datatype peekHead( ) {assert(size()>0); q.getHead( )->getData( );}; datatype peekTail( ) {assert(size()>0); q.getTail( )->getData( );}; datatype dequeue( ) {assert(size()>0); int x=peekHead( ); q.removeHead( ); return x;}; int size( ) {return q.size( );}; bool isEmpty( ) {return q.isEmpty( );}; private: List q; }; // Time: All member functions take O(1) time. CS 103

A Dynamic-Array Implementation of the Queue Class The container for items is a dynamic array It is accomplished as: datatype *p=new datatype[50]; CS 103

A Class for Queue using Dynamic Arrays class Queue{ public: typedef int datatype; Queue(int capacity = 50) ; void enqueue(datatype x); datatype dequeue( ); datatype peekHead( ); datatype peekTail( ); int size( ); bool isEmpty( ); private: int capacity; // default value is 50 datatype *p; // pointer a dynamic array created by constructor int length; // number of actual elements in the queue int head; // index of the head element in the array int tail; // index of the tail element in the array }; CS 103

How head and tail Change head increases by 1 after each dequeue( ) tail increases by 1 after each enqueue( ) head tail Now: 1 2 47 48 49 4 3 head tail After enqueue: 1 2 47 48 49 4 3 head tail After dequeue: 1 2 47 48 49 4 3 CS 103

False-Overflow Issue First Suppose 50 calls to enqueue have been made, so now the queue array is full Assume 4 calls to dequeue( ) are made Assume a call to enqueue( ) is made now. The tail part seems to have no space, but the front has 4 unused spaces; if never used, they are wasted. 49 48 47 4 3 2 1 49 48 47 4 3 2 1 CS 103

Solution: A Circular Queue Allow the head (and the tail) to be moving targets When the tail end fills up and front part of the array has empty slots, new insertions should go into the front end Next insertion goes into slot 0, and tail tracks it. The insertion after that goes into a lot 1, etc. head tail 1 2 47 48 49 4 3 CS 103

Illustration of Circular Queues Current state: After One Call to enqueue() head 1 2 47 48 49 3 4 tail head tail 1 2 47 48 49 3 4 head tail 1 2 47 48 49 3 4 CS 103

Numerics for Circular Queues head increases by (1 modulo capacity) after each dequeue( ): head = (head +1) % capacity; tail increases by (1 modulo capacity) after each enqueue( ): tail = (tail +1) % capacity; CS 103

Complete Implementation of Queues with Dynamic Arrays Show the class structure as a refresher (next slide) The implementations of the constructor and member functions will follow afterwards CS 103

The Class Structure (revisited) class Queue{ public: typedef int datatype; Queue(int capacity = 50) ; void enqueue(datatype x); datatype dequeue( ); datatype peekHead( ); datatype peekTail( ); int size( ); bool isEmpty( ); private: int capacity; // default value is 50 datatype *p; // pointer a dynamic array created by constructor int length; // number of actual elements in the queue int head; // index of the head element in the array int tail; // index of the tail element in the array }; CS 103

Implementations of the Members Queue::Queue(int capacity){ this.capacity = capacity; p = new datatype[capacity]; length=0; head=0; tail=0; }; int Queue::size( ){return length;}; bool Queue::isEmpty( ) {return (length==0);}; Queue::datatype Queue::peekHead( ){assert(length>0);return p[head];}; Queue::datatype Queue::peekTail( ){assert(length>0); return p[tail];}; Time: All O(1) time. CS 103

Implementation enqueue( ) void Queue::enqueue(datatype x){ if (length==0) {p[tail]=x; length++;} else if (length<capacity) {length++; tail=tail+1 % capacity; p[tail]=x; } else {// Filled. Create a new array twice big. Copy current array to it. Add x. datatype *q= new datatype[2*capacity]; int j = head; // copy filled array p (from head to tail) to array q[0…] for (int i=0;i<capacity;i++) {q[i]=p[j]; j=j+1 % capacity;} head = 0; tail = capacity; // pointing to the first empty slot for now q[tail]=x; // put x in the first empty slot length++; // account for adding x capacity = 2*capacity; // reflect that capacity is now doubled delete [] p; // deletes the old array pointed to by p p =q; // makes p point to the new array. } }; Time: O(1) except at overflow, in which case O(length). CS 103

Implementation dequeue( ) Queue::datatype Queue::dequeue( ){ assert(length>0); datatype x= p[head]; head=head+1 % capacity; return x; }; Time: O(1). CS 103