- Slides: 32
CHP 4 QUEUE
1. INTRODUCTION ØA queue is a linear list in which elements can be added at one end and elements can be removed only at other end. ØThat is, the first element added to the queue is the first element to be removed. ØQueue works on the principle of ‘ first in first out’(FIFO). ØA common example of queue is people waiting in line at ticket window.
2. DEFINITION AND TYPES A queue is a linear data structure in whichanewelement is inserted at one end and element is deleted from other end. The end of the queue from which the element is deleted is known as front. The end at which new element is added is known as rear. Fig. 4. 1 shows a queue. v. TYPES OF QUEUE: 1. CIRCULAR QUEUE 2. DEQUEUE 3. PRORITY QUEUE
3. OPERATIONS ON QUEUE q. The two basic operations that can be performed on a queue are: Insert : to insert an element at rear of the queue Delete: to delete an element from front of the queue. q. Before inserting a new element in the queue, it is necessary to test the condition of overflow. q. Overflow occurs when the queue is full and there is no space for a new element. q Similarly, before removing the element from the queue, it is necessary to check the condition of underflow. q Underflow occurs when the queue is empty.
4. MEMORY REPRESENTATION OFQUEUES A queue can be represented in memory either as an array or as a singly linked list.
INSERTOPERATIONS ON QUEUE
DELETE OPERATIONS ON QUEUE
5. CIRCULAR QUEUE � As discussed earlier, in case of queue represented as an array, once the value of the rear reaches the maximum size of the queue, no more elements can be inserted. � However, there may be the possibility that space on the left of the front index is vacant. Hence, in spite of space on the left of front being empty, the queue is considered to be full. � This wastage of space in the array implementation of a queue can be avoided by shifting the elements to the beginning of array if the space is available. � In order to do this, the values of Rear and Front indices have to be changed accordingly. However, this is a complex process and is difficult to be implemented. An alternative solution to this problem is to implement a queue as a circular queue. � The array implementation of circular queue is similar to the array implementation of queue. The only difference is that as soon as the rear index of the queue reaches the maxi mumsize of the array, Rear is reset to the beginning of the queue provided it is free. The circular queue is full only when all the locations in the array are occupied. The circular queue is shown in Figure 4. 3.
Various States of Circular Queue After insert and Delete operations
Number of Elements in Circular Queue � The total number of elements in a circular queue at any point of time can be calculated from the current values of the Rear and the Front indices of the queue. � In case, Front<Rear, the total number of elements = Rear Front+1. For instance, in Fig ure 4. 5(a), Front=3 and Rear=7. � Hence, the total number of elements in CQueue at this point of time is 7 3+1=5. � In case, Front>Rear, the total number of elements = Max+ (Rear Front) +1. For instance, in Figure 4. 5(b), Front=3 and Rear=0. Hence, the total number of elements in CQueue is 8+(0 3)+l.
Algorithm of Circular Queue
Algorithm of Circular Queue
6. PRIORITY QUEUE � A priority queue is a type of queue in which each element is assigned a priority and the elements are added or removed according to that priority. While implementing a priority queue, following two rules are applied. (1)The element with higher priority is processed before any element of lower priority. (2)The elements with the same priority are processed according to the order in which they were added to the queue. � A priority queue can be represented in many ways. Here, we are discussing multi queue implementation of priority queue.
Multi-queue Implementation (Array Representation of Priority Queue) �In multi queue representation of priority queue, for each priority, a queue is maintained. The queue corresponding to each priority can be represented in the same array of sufficient size. �For each queue, two variables Fronti and Reari are maintained (see Figure 4. 6). �Observe that Fronti and Reari correspond to the front and rear position of queue for priority Priorityi.
� Clearly, in this representation, shifting is required to make space for an element to be inserted. � To avoid this shifting, an alternative representation can be used (see Figure 4. 7). � In this representation, instead of representing queue corresponding to each priority using a single array, a separate array for each priority is maintained. � Each queue is implemented as a circular array and has its own two variables, Front and Rear. � The element with given priority number is inserted in the corresponding queue. Similarly, whenever an element is to be deleted from the queue, it must be the element from the highest priority queue. � Note that lower priority number indicates higher priority.
�If the size of each queue is same, then instead of multiple one dimensional arrays, a single two dimensional array can be used where row i corresponds to the queue of priority i. �In addition, two single dimensional arrays are used. One is used to keep track of front position and another to keep track of rear position of each queue (see Figure 4. 8).
INSERT OPERATION IN PRIORITY QUEUE
DELETE OPERATION IN PRIORITY QUEUE
7. DEQUE �Deque (short form of double ended queue) is a linear list in which elements can be inserted or deleted at either end but not in the middle. �That is, elements can be inserted/deleted to/ from the rear or the front end. � Figure 4. 9 shows the representation of a deque.
INSERT OPERATION IN BEGINNING OF DEQUE
INSERT OPERATION AT END OF DEQUE
DELETE OPERATION IN BEGINNING OF DEQUE
DELETE OPERATION AT END OF DEQUE
VARIATIONS OF DEQUE � There are two variations of a deque that are as follows: (1)Input restricted deque: It allows insertion of elements at one end only but deletion can be done at both ends. (2)Output restricted deque: It allows deletion of elements at one end only but insertion can be done at both ends. � The implementation of both these queues is similar to the implementation of deque. The only difference is that in input restricted queue, function for insertion in the beginning is not needed whereas in output restricted queue, function for deletion in the beginning is not needed.
7. APPLICATION OF QUEUE � There are numerous applications of queue in computer science. � Various real life applica tions, like railway ticket reservation, banking system are implemented using queue. � One of the most useful applications of queue is in simulation. � Another application of queue is in operating system to implement various functions like CPU scheduling in multiprogram ming environment, device management (printer or disk), etc. Besides these, there are several algorithms like level order traversal of binary tree, etc. , that use queues to solve the problems efficiently.
Simulation � Simulation is the process of modelling a real life situation through a computer program. � Its main use is to study a real life situation without actually making it to occur. � It is mainly used in areas like military, scientific research operations where it is expensive or dangerous to experiment with the real system. � In simulation, corresponding to each object and action, there is counterpart in the program. � The objects being studied are represented as data and action as operations on the data. � By supplying different data, we can observe the result of the program. � If the simulation is accurate, the result of the program represents the behaviour of the actual system accurately.
Simulation(Cont. ) � Consider a ticket reservation system having four counters. � If a customer arrives at time t and a counter is free then the customer will get the ticket immediately. � However, it is not always possible that counter is free. In that case, a new customer goes to the queue having less number of customers. � Assume that the time required to issue the ticket is t. Then the total time spent by the customer is equal to the time t (time required to issue the ticket) plus the time spent waiting in line. � The average time spent in the line by the customer can be computed by a program simulating the customer action. � This program can be implemented using queue, since while one customer is being serviced, others keep on waiting.
CPU Scheduling in Multiprogramming Environment �As we know that in multiprogramming environment, multiple processes run concurrently to increase CPU utilization. All the processes that are residing in memory and are ready to execute are kept in a list referred as ready queue. It is the job of scheduling algorithm to select a process from the processes and allocate the CPU to it. �Let us consider a multiprogramming environment where the processes are classified into three different groups, namely, system processes, interactive processes and batch processes. �To each group of process, some priority is associated. The system processes have the highest priority whereas the batch processes have the least priority.
CPU Scheduling in Multiprogramming Environment(Cont. ) � To implement mul tiprogramming environment, multi-level queue scheduling algorithm is used. � In this algorithm, the ready queue is partitioned into multiple queues (see Figure 4. 12). � The processes are assigned to the respective queues. � The higher priority processes are executed before the lower priority processes. For example, no batch process can run unless all the system processes and interactive processes arc executed. � If a batch process is running and a system process enters the queue, then batch process would be pre empted to execute this system process.
Round Robin algorithm � The round robin algorithm is one of the CPU scheduling algorithms designed for the time sharing systems. � In this algorithm, the CPU is allocated to a process for a small time interval called time quantum (generally from 10 to 100 milliseconds). � Whenever a new process enters, it is inserted at the end of the ready queue. The CPU scheduler picks the first process from the ready queue and processes it until the time quantum elapsed. � Then CPU switches to the next process in the queue and first process is inserted at the end of the queue if it has not been finished. � If the process is finished before the time quantum, the process itself will release the CPU voluntarily and the process will be deleted from the ready queue. � This pro cess continues until all the processes are finished. � When a process is finished, it is deleted from the queue. To implement the round robin algorithm, a circular queue can be used.