Presentation is loading. Please wait.

Presentation is loading. Please wait.

Cs212: Data Structures Computer Science Department Lecture 7: Queues.

Similar presentations


Presentation on theme: "Cs212: Data Structures Computer Science Department Lecture 7: Queues."— Presentation transcript:

1 Cs212: Data Structures Computer Science Department Lecture 7: Queues

2 Lecture Contents What is Queue? Basic Queue Operation.
The Queue Abstract Data Type. A Simple Array-Based Queue Implementation. Using an Array in a Circular Way. Using the Modulo Operator to Implement a Circular Array. Priority Queues. 14-Jan-19 Computer Science Department

3 Queues What is Queue? A queue is a linear list in which data can only be inserted at one end ,called rear , and deleted from the other end , called the front A queue is simply a waiting line that grows or shrinks by adding or taking elements form it. Unlike stack, it’s a structure in which both ends are used. 14-Jan-19 Computer Science Department

4 Queues Aqueue is a first in first out (FIFO) structure no search,
What is Queue? Aqueue is a first in first out (FIFO) structure no search, no adding in arbitrary positions, no sorting, no access to anything beyond the front and rear elements. 14-Jan-19 Computer Science Department

5 Example Applications There are several possible applications for queues. Stores, theaters, reservation centers, and other similar services typically process customer requests according to the FIFO principle. A queue would therefore be a logical choice for a data structure to handle transaction processing for such applications. For example, it would be a natural choice for handling calls to the reservation center of an airline or to the box office of a theater. 14-Jan-19 Computer Science Department

6 The Queue Abstract Data Type
What is Queue? the queue abstract data type defines a collection that keeps objects in a sequence where element access and deletion are restricted to the first element in the sequence, which is called the front of the queue, element insertion is restricted to the end of the sequence, which is called the rear of the queue. This restriction enforces the rule that items are inserted and deleted in a queue according to the first-in first-out (FIFO) principle. 14-Jan-19 Computer Science Department

7 The Queue Abstract Data Type
The queue abstract data type (ADT) supports the following two fundamental methods: enqueue(e): Insert element e at the rear of the queue. dequeue( ): Remove and return from the queue the object at the front; an error occurs if the queue is empty. 14-Jan-19 Computer Science Department

8 Queue Operations There are four basic queue operations Enqueue Dequeue
Queue Front Queue Rear 14-Jan-19 Computer Science Department

9 Queues Queue Operation 14-Jan-19 Computer Science Department

10 Basic Queue Operations
Enqueue: inserts an element at the rear of the queue. grape Data Enqueue apple kiwi apple kiwi grape front rear front rear queue queue operation

11 Basic Queue Operations
Dequeue: deletes element at the front of the queue. apple Data Dequeue kiwi grape apple kiwi grape front rear front rear queue queue operation

12 Basic Queue Operations
Queue Front: Examines the element at the front of the queue. apple Data Queue Front apple kiwi grape apple kiwi grape front rear front rear queue operation

13 Basic Queue Operations
Queue Rear: Examines the element at the rear of the queue. grape Data Queue Rear apple kiwi grape apple kiwi grape front rear front rear queue operation

14 Additional Operations
Additionally, the queue ADT includes the following supporting methods: size( ) : Return the number of objects in the queue. isEmpty( ) : Return a Boolean value that indicates whether the queue is empty. front( ) : Return, but do not remove, the front object in the queue; an error occurs if the queue is empty. 14-Jan-19 Computer Science Department

15 A Simple Array-Based Queue Implementation
We present a simple realization of a queue by means of an array, Q, of fixed capacity, storing its elements. The main rule with the queue ADT is that we insert and delete objects according to the FIFO principle, we must decide how we are going to keep track of the front and rear of the queue. 14-Jan-19 Computer Science Department

16 A Simple Array-Based Queue Implementation
One possibility is to adapt the approach we used for the stack implementation, letting Q[0] be the front of the queue and then letting the queue grow from there. This is not an efficient solution, it requires that we move all the elements forward one array cell each time we perform a dequeue operation. 14-Jan-19 Computer Science Department

17 A Simple Array-Based Queue Implementation
This will take O(n) time to perform the dequeue method,where n is the current number of objects in the queue. If we want to achieve constant time for each queue method, we need a different approach. 14-Jan-19 Computer Science Department

18 Using an Array in a Circular Way
To avoid moving objects once they are placed in Q, we define two variables f and r, which have the following meanings: f is an index to the cell of Q storing the first element of the queue (which is the next candidate to be removed by a dequeue operation), unless the queue is empty (in which case f = r). r is an index to the next available array cell in Q. 14-Jan-19 Computer Science Department

19 Using an Array in a Circular Way
Initially, we assign f = r = 0, which indicates that the queue is empty. Now, when we remove an element from the front of the queue, we increment f to index the next cell. Likewise, when we add an element, we store it in cell Q[r] and increment r to index the next available cell in Q. This scheme allows us to implement methods front, enqueue, and dequeue in constant time. 14-Jan-19 Computer Science Department

20 Using an Array in a Circular Way
Consider, for example, what happens if we repeatedly enqueue and dequeue a single element N different times. We would have f = r = N. If we were then to try to insert the element just one more time, we would get an array-out-of-bounds error (since the N valid locations in Q are from Q[0] to Q[N − 1]), even though there is plenty of room in the queue in this case. To avoid this problem and be able to utilize all of the array Q, we let the f and r indices "wrap around" the end of Q. That is, we now view Q as a "circular array" that goes from Q[0] to Q[N − 1] and then immediately back to Q[0] again. 14-Jan-19 Computer Science Department

21 Using an Array in a Circular Way
14-Jan-19 Computer Science Department

22 Using the Modulo Operator to Implement a Circular Array
Implementing this circular view of Q is actually pretty easy. Each time we increment f or r, we compute this increment as "(f + 1) mod N" or "(r + 1) mod N," respectively. Implementation of a queue using a circular array. The implementation uses the modulo operator to "wrap" indices around the end of the array and it also includes two instance variables, f and r, which index the front of the queue and first empty cell after the rear of the queue respectively. 14-Jan-19 Computer Science Department

23 14-Jan-19 Computer Science Department

24 Queue Linked List Design
For a linked list implementation of a queue, we use two types of structures: a head and a node. apple kiwi grape fig front rear Conceptual queue 4 front count rear apple kiwi grape fig Physical queue

25 Implementing a Queue with a Generic Linked List
We can efficiently implement the queue ADT using a generic singly linked list. we choose the front of the queue to be at the head of the list, and the rear of the queue to be at the tail of the list. In this way, we remove from the head and insert at the tail. we simply give a Java implementation for the fundamental queue methods . 14-Jan-19 Computer Science Department

26 Implementing a Queue with a Generic Linked List
enqueue method: 14-Jan-19 Computer Science Department

27 Implementing a Queue with a Generic Linked List
dnqueue method: 14-Jan-19 Computer Science Department

28 Queue Linked List Design
For a linked list implementation of a queue, we use two types of structures: a head and a node. apple kiwi grape fig front rear Conceptual queue 4 front count rear apple kiwi grape fig Physical queue

29 Priority Queues a priority queue is an abstract data type which is like a regular queue or stack data structure, but where additionally each element has a "priority" associated with it. In a priority queue, an element with high priority is served before an element with low priority. If two elements have the same priority, they are served according to their order in the queue.

30 Priority Queues Priority queue returns elements in priority order, order determined by key. It stores collection of entries. Each entry is a (key, value) pair. Stacks and Queues: Removal order determined by order of inserting Priority Queue: Order determined by key ( Key may be part of element data or separate) 14-Jan-19 Computer Science Department

31 Priority Queues Applications: Hospital Emergency Rooms Stock market

32 Priority Queue Suppose that you have a few assignments from different courses. Which assignment will you want to work on first? You set your priority based on due days. Due days are called keys. Course Priority Due day Database Systems 2 October 3 UNIX 4 October 10 Data Structure & Algorithm 1 September 29 Structured Systems Analysis 3 October 7

33 What’s so different? Stacks and Queues:
• Removal order determined by order of inserting (stack LIFO, Queue FIFO) Sequences: • User chooses exact placement when inserting and explicitly chooses removal order Priority Queue • Removal order determined by key • Key may be part of element data or separate Examples: Processes scheduled by CPU Hospital Emergency Rooms College admissions process for students

34 End Of Chapter References: Text book, chapter5: stack & Queues
14-Jan-19 Computer Science Department


Download ppt "Cs212: Data Structures Computer Science Department Lecture 7: Queues."

Similar presentations


Ads by Google