Queue
Queue
Introduction
• Queue is an important data structure which stores its elements in an
ordered manner.
• The elements in a queue are added at one end called the rear and
removed from the other one end called the front.
Array Representation of Queues
• Now, front = 0 and rear = 6. Every time a new element has to be added,
we will repeat the same procedure.
• Now, if we want to delete an element from the queue, then the value of
front will be incremented. Deletions are done from only this end of the
queue.
Since insertion and deletion of an element are Since insertion and deletion of an element are
performed at one end of the stack, the elements can performed at opposite end of the queue, the elements
only be removed in the opposite order of insertion. can only be removed in the same order of insertion
Stack is called as Last In First Out (LIFO) List. Queue is called as First In First Out (FIFO) List.
The most accessible element is called as TOP of the Insertion of element is performed at FRONT end and
stack and insertion and deletion is performed at this deletion is performed from REAR end
end only.
Example of stack is arranging plates in one above Example is ordinary queue is supermarket billing
one. queue.
Insertion operation is referred as PUSH and deletion Insertion operation is referred as ENQUEUE and
operation is referred as POP deletion operation is referred as DQUEUE
Function calling in any languages uses Stack Task Scheduling by Operating System uses queue
Circular Queues
• Now, if you want to insert a new element, it cannot be done because the space is available only at the left of the queue.
• This is the major drawback of a linear queue. Even if space is available, no insertions can be done once rear is equal to
MAX – 1.
• This leads to wastage of space. In order to overcome this problem, we use circular queues.
• In a circular queue, the first index comes right after the last index.
Inserting an Element in a Circular Queue
• If rear != MAX – 1, then the rear will be incremented and value will be
inserted
• If front!=0 and rear=MAX -1, then it means that the queue is not full. So, set
rear = 0 and insert the new element.
Algorithm to Insert an Element in a Circular Queue
Deleting an Element from a Circular Queue
• If the queue is not empty and after returning the value on front, if front = rear, then it
means now the queue has become empty and so front and rear are set to -1.
• If the queue is not empty and after returning the value on front, if front = MAX -1, then
front is set to 0.
Algorithm to Delete an Element from a Circular Queue
Circular Queue (Example)
• It is also known as a head-tail linked list because elements can be added to or removed from the front (head) or
back (tail).
• A deque can be implemented either using a circular array or a circular doubly linked list.
• In a deque, two pointers are maintained, LEFT or FRONT and RIGHT or REAR which point to either end of the
deque.
• The elements in a deque stretch from LEFT end to the RIGHT and since it is circular, Deque[N-1] is followed by
Deque[0].
• Use: Palindrome-Checker
Deques
Output restricted deque: In this dequeue deletions can be done only at one of the ends
while insertions can be done on both the ends.
Priority Queues
• Ascending Priority Queue: Elements can be inserted in any order but only smallest element
can be removed.
• Descending Priority Queue: Elements can be inserted in any order but only largest element
can be removed.
Array Representation of Priority Queues
• When arrays are used to implement a priority queue, then a separate queue for each
priority number is maintained.
• Each of these queues will be implemented using circular arrays or circular queues.
Every individual queue will have its own FRONT and REAR pointers.
• We can use a two-dimensional array for this purpose where each queue will be allocated
same amount of space.
• Given the front and rear values of each queue, a two dimensional matrix can be formed.
Multiple Queues
• When implementing a queue using an array, the size of the array must be
known in advance.
• If the queue is allocated less space, then frequent OVERFLOW conditions will
be encountered.
• To deal with this problem, the code will have to be modified to reallocate more
space for the array, but this results in sheer wastage of memory. Thus, there
lies a tradeoff between the frequency of overflows and the space allocated.
• A better solution to deal with this problem is to have multiple queues or to have
more than one queue in the same array.
• One important point to note is that while queue A will grow from left to right, the
queue B on the same time will grow from right to left.
Applications of Queues
• Queues are widely used as waiting lists for a single shared resource like printer,
disk, CPU.
• Queues are used to transfer data asynchronously e.g., pipes, file IO, sockets.
• Queues are used as buffers on MP3 players and portable CD players, iPod
playlist.
• Queues are used in Playlist for jukebox to add songs to the end, play from the
front of the list.
• Queues are used in OS for handling interrupts. When programming a real-time
system that can be interrupted, for ex, by a mouse click, it is necessary to
process the interrupts immediately before proceeding with the current job. If the
interrupts have to be handled in the order of arrival, then a FIFO queue is the
appropriate data structure
THANK YOU