DEV Community

Cover image for Queues
sndp
sndp

Posted on

Queues

What are Queues ?

A Queue is a data structure that enables us to create an array of elements and manage its data in First-In-First-Out (FIFO) logic.

First In First Out

First in first out as we talked above is simply the way how a queue behaves. It's okay to say that every queue behaves this way. As an example, you rush to the highway in your car and sees a long queue before the tollbooth. You are the last to join and the first to join now passes the gate, then it should be the second to first and the third and so on. So just like that we can apply this in our programmings.

In programming there are plenty of scenarios we use queue data structure.

- Priority Scheduling

CPU bound tasks are scheduled. To process them efficiently priority scheduling is used. Uses fifo conecpt.

- Shortest Path Algorithm (Dijkstra)

To optimize the algorithm of shortest path, uses priority scheduling which uses queues.

Types of Queues

There are 2 main types of queues differencing from their concepts
They are Normal Queues and Circular Queues.

The following variables are used by a queue class.
size front items rear queue

private int size, front, items, rear;
private int[] queue;

// queue -> queue as an array
// size  -> initial length of queue
// front -> current first item's index
// items -> current length of queue
// rear  -> current last item's index
Enter fullscreen mode Exit fullscreen mode

The followings implements a queue.

0. Queue

Queue parameterized constructor
Initializes a new queue with 'size' as parameter

public Queue(int size) {
   this.size = size;
   this.front = 0;
   this.rear = -1;
   this.items = 0;
   this.queue = new int[size];
   System.out.println("Queue Initialized!");
}

// queue array size is given as parameter
// first item's index = 0. because queue not served yet
// last item does not exist yet. so rear = -1
// current items = 0. currently queue is empty
// queue is initialized
Enter fullscreen mode Exit fullscreen mode

1. Insert

Inserts an item to the queue

public void insert(int x) {
   if (rear == size - 1) {
      System.out.println("Queue Already Full!");
   }
   else {
      rear++;
      queue[rear] = x;
      items++;
      System.out.println(x + " Inserted to queue");
   }
}

// first checks if queue is full
// if queue is not full
// last item's index (rear) is increased
// items count also increases
// front = 0, rear = 0, items = 1

// let's add another item
// front = 0, rear = 1, items = 2
// our queue has two items now

// what if 
// if the last item's index has reached to
// possibly the queue's last index? (queue is full)
// i.e. - let's say queue is with size of 5 
// and we inserted 5 items
// inserted items' indexes -> 0 1 2 3 4
// front = 0, rear = 4, items = 5
// because rear equals (size - 1) equals 4
// so queue is full and cannot insert more
Enter fullscreen mode Exit fullscreen mode

2. Peek

Prints the current first item in the queue

public void peek() {
   if (items == 0) {
      System.out.println("Queue is Empty!");
   }
   else {
      int frontItem = queue[front];
      System.out.println(frontItem + " is in front of queue");
   }
}
Enter fullscreen mode Exit fullscreen mode

3. Delete

Deletes an item from the queue

public void delete() {
   if (items == 0) {
      System.out.println("Queue is Empty!");
   }
   else {
      int frontItem = queue[front];
      front++;
      items--;
      System.out.println(frontItem + " Deleted from queue");
   }
}

// first checks if items == 0 (if so queue is empty)
// if queue is empty cannot delete items from queue
// if it is not then take the first item with front as index
// the first item's index moves to the second item's index 
// total items count reduces by one also
// now second item is the first item
Enter fullscreen mode Exit fullscreen mode

There are similarities between highway tollbooth example and this.
You join to the tollbooth queue -> insert method
You see the first vehicle in the queue -> peek method
First vehicle passes the gate with ticket -> delete method

The queue code sample explained above uses integers as its data type.
Source code is available in following url.

https://github.com/lizardkingLK/Queues

Top comments (2)

Collapse
 
weltam profile image
Welly Tambunan

great, might be add hackerrank problem that can use this concept?

Collapse
 
lizardkinglk profile image
sndp

thanks. will look forward to.