0% found this document useful (0 votes)
39 views

Module 6 - Queue

A queue is a first-in, first-out (FIFO) data structure where new elements are added to the rear of the queue and existing elements are removed from the front of the queue. Common queue operations include enqueue to add an element, dequeue to remove an element, and functions to check if the queue is empty or full. Queues are useful for processes where data is consumed asynchronously such as CPU scheduling, disk scheduling, and transferring data between processes.

Uploaded by

arturogallardoed
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
39 views

Module 6 - Queue

A queue is a first-in, first-out (FIFO) data structure where new elements are added to the rear of the queue and existing elements are removed from the front of the queue. Common queue operations include enqueue to add an element, dequeue to remove an element, and functions to check if the queue is empty or full. Queues are useful for processes where data is consumed asynchronously such as CPU scheduling, disk scheduling, and transferring data between processes.

Uploaded by

arturogallardoed
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 17

Queue Data Structure (1)

A queue is a useful data structure in programming. It is similar to the ticket


queue outside a cinema hall, where the first person entering the queue is
the first person who gets the ticket.
Queue follows the First In First Out (FIFO) rule - the item that goes in first is
the item that comes out first.
Queue Data Structure (2)
• In the above image, since 1 was kept in the queue before 2, it is the first
to be removed from the queue as well. It follows the FIFO rule.
• In programming terms, putting items in the queue is called enqueue, and
removing items from the queue is called dequeue.
• One can implement the queue in any programming language since the
specification is pretty much the same.
Basic Operations of Queue
A queue is an object (an abstract data structure - ADT) that allows the
following operations:
• Enqueue: Add an element to the end of the queue
• Dequeue: Remove an element from the front of the queue
• IsEmpty: Check if the queue is empty
• IsFull: Check if the queue is full
• Peek: Get the value of the front of the queue without removing it
Workings of Queue Data Structure (1)
The operations work as follows:

• There are two pointers: FRONT and REAR


• FRONT tracks the first element of the queue
• REAR tracks the last element of the queue
• initially, set value of FRONT and REAR to -1
Workings of Queue Data Structure (2)
Enqueue Operation
• check if the queue is full
• for the first element, set the value of FRONT to 0
• increase the REAR index by 1
• add the new element in the position pointed to by REAR

Dequeue Operation
• check if the queue is empty
• return the value pointed by FRONT
• increase the FRONT index by 1
• for the last element, reset the values of FRONT and REAR to -1
Illustration of Queue Data Structure (1)
Illustration of Queue Data Structure (2)
Illustration of Queue Data Structure (3)
Limitations of Queue Data Structure
• As can be seen in the image below, after a bit of enqueuing and dequeuing, the size
of the queue has been reduced.

• And we can only add indexes 0 and 1 only when the queue is reset (when all the
elements have been dequeued).
• After REAR reaches the last index, if we can store extra elements in the empty
spaces (0 and 1), we can make use of the empty spaces. This is implemented by a
modified queue called the circular queue.
Complexity Analysis and Applications of Queue
Complexity Analysis
The complexity of enqueue and dequeue operations is

Applications
• CPU scheduling, Disk Scheduling
• When data is transferred asynchronously between two processes, the queue
is used for synchronization. For example: IO Buffers, pipes, file IO, etc
• Handling of interrupts in real-time systems.
• Call Center phone systems use Queues to hold people calling them in order.
// Queue implementation in Java
public class Queue {
int SIZE = 5;
int items[] = new int[SIZE];
int front, rear;

Queue() {
front = -1;
rear = -1;
}
// Queue implementation in Java Cont’d
boolean isFull() {
if (front == 0 && rear == SIZE - 1) {
return true;
}
return false;
}

boolean isEmpty() {
if (front == -1)
return true;
else
return false;
}
// Queue implementation in Java Cont’d
void enQueue(int element) {
if (isFull()) {
System.out.println("Queue is full");
} else {
if (front == -1)
front = 0;
rear++;
items[rear] = element;
System.out.println("Inserted " + element);
}
}
int deQueue() {
int element;
if (isEmpty()) {
System.out.println("Queue is empty");
return (-1);
} else {
element = items[front];
if (front >= rear) {
front = -1;
rear = -1;
} /* Q has only one element, so we reset the queue after deleting it. */
else {
front++;
}
System.out.println("Deleted -> " + element);
return (element);
}
}
void display() {
/* Function to display elements of Queue */
int i;
if (isEmpty()) {
System.out.println("Empty Queue");
} else {
System.out.println("\nFront index-> " + front);
System.out.println("Items -> ");
for (i = front; i <= rear; i++)
System.out.print(items[i] + " ");

System.out.println("\nRear index-> " + rear);


}
}
public static void main(String[] args) {
Queue q = new Queue();
// deQueue is not possible on empty queue
q.deQueue();
// enQueue 5 elements
q.enQueue(1);
q.enQueue(2);
q.enQueue(3);
q.enQueue(4);
q.enQueue(5);
// 6th element can't be added to because the queue is full
q.enQueue(6);
q.display();
// deQueue removes element entered first i.e. 1
q.deQueue();
// Now we have just 4 elements
q.display();
}
}

You might also like