×

Queue operations in Data Structure

Queue - Queue is a linear data structure or first in first out data structure means the first element added in the queue will be removed first and the last element will be removed in last. Its behavior is defined by the values stored and operations performed on it.

Queue Operations In Data Structure

Applications of Queue Data Structure:

  1. Graph Traversal Algorithm (Breadth Frist Search),
  2. CPU Scheduling,
  3. Disk Scheduling, etc.

Let us see some primitive operations performed on it with examples:

  1. enqueue() – Enqueue method is used to insert element at end in a queue
  2. dequeue() – Dequeue method removes the first element of the queue
  3. isFull() – isFull method is used to check whether the queue is full or not
  4. isEmpty() – isEmpty method is used to check whether the queue is empty or not
  5. size() – Size method is used to find the number of elements present in the queue
  6. front() – Front method is used to find the first element present in the queue

C++ Code:

// C++ Program to perform operations on queue

#include <iostream>

using namespace std;

// Declaring all the operations performed on Queue

// Function of type integer will return an integer value and functions of types void will not return any value

void enqueue(int value);

void dequeue();

int isFull();

int isEmpty();

int front();

int size();

int myQueue[10]; // Creating a array of size 10 and will make it behave like queue

// n is the size of the queue and front_index and rear_index will point to front and rear element of the queue respectively

int front_index = -1, rear_index = -1, n = 10;

int main()

{

    int x;

    x = isEmpty(); // X will store the value returned by the isEmpty Function

    // "Queue is Empty!" will be printed if x is equal to 1 or "Queue is not Empty!" will be printed if x is equal to 0

    x ? cout << "Queue is Empty!" << endl : cout << "Queue is not Empty!";

    // Inserting elements in the queue using the enqueue function

    enqueue(30);

    enqueue(44);

    enqueue(90);

    enqueue(53);

    enqueue(12);

    enqueue(99);

    // Checking how many elements are there in the queue

    x = size();

    cout << "Number of elements in the queue is " << x << endl;

    x = isFull();

    // "Queue is Full!" will be printed if x is equal to 1 or "Queue is not Full!" will be printed if x is equal to 0

    x ? cout << "Queue is Full!" << endl : cout << "Queue is not Full!" << endl;

    x = isEmpty();

    // "Queue is Empty!" will be printed if x is equal to 1 or "Queue is not Empty!" will be printed if x is equal to 0

    x ? cout << "Queue is Empty!" << endl : cout << "Queue is not Empty!" << endl;

    x = front();

    // The first statement of the below ternary operator will be executed if the x is not equal to 0

    x ? cout << "Front element of the queue = " << x << endl : cout << "No front element. The queue is empty!" << endl;

    // Deleting and printing all the elements of the queue using the dequeue function

    cout << "Elements of queue are: ";

    do

    {

        dequeue();

    } while (front_index != -1);

    cout << endl;

    // After deleting all the value from the queue, trying to print front element.

    x = front();

    x ? cout << "Front element of the queue = " << x << endl : cout << "No front element. The queue is empty!" << endl;

}

// Function to insert element in the queue

void enqueue(int value)

{

    if (rear_index == n - 1) // Condition to check whether the queue is Full or not

    {

        cout << "Overflow!" << endl;

        return;

    }

    if (front_index == -1)

    {

        front_index = 0;

        rear_index = 0;

    }

    else

    {

        rear_index = rear_index + 1;

    }

    myQueue[rear_index] = value; // Adding the value after increasing the rear_index by 1

}

// Function to delete elements from the Queue. Actually, we not delete the elements but we just forget those elements

void dequeue()

{

    int deleted_ele;

    if (front_index == -1) // Condition to check whether the queue is empty or not

    {

        cout << "Underflow!";

        return;

    }

    deleted_ele = myQueue[front_index]; // Storing the value of the front element of the queue

    cout << deleted_ele << " ";

    /*In the below statements we are increasing the front_index by 1 and if we are deleting the last element,

    we are making rear_index and front_index equal to -1 */

    if (front_index == rear_index)

    {

        front_index = -1;

        rear_index = -1;

    }

    else

    {

        front_index++;

    }

}

// Function to check whether the Queue if Full or not

int isFull()

{

    // The function will return 1 if the queue is full otherwise it will return 0

    if (front_index == 0 && rear_index == n - 1) // Condition of FULL queue

    {

        return 1;

    }

    return 0;

}

// function to check whether the queue is empty or not

int isEmpty()

{

    // The function will return 1 if the queue is empty otherwise it will return 0

    if (front_index == -1) // Condition of empty queue

    {

        return 1;

    }

    return 0;

}

// Function to find the number of elements in the queue

int size()

{

    if (front_index == -1) // It will return zero if the queue is empty

    {

        return 0;

    }

    return rear_index - front_index + 1; // It will return the number of elements present in the list

}

// Function to print the front element

int front()

{

    // It will return 0 when the queue is empty otherwise the front element

    if (front_index == -1)

    {

        return 0;

    }

    return myQueue[front_index];

}

The output of the above Program:

Queue is Empty!

Number of elements in the queue is 6

Queue is not Full!

Queue is not Empty!

Front element of the queue = 30

Elements of queue are: 30 44 90 53 12 99

No front element. The queue is empty!

C Code:

// C program to implement the queue operations

#include <stdio.h>

/* Declaring the operations performed on the Queue. The functions of type int will return an integer value and functions of type

void will not return any value. */

void enqueue(int value);

void dequeue();

int isFull();

int isEmpty();

int front_ele();

int size();

int myQueue[10]; // Declaring the queue of size 10

// n is the size of the queue and front and rear will point to front and rear element of the queue respectively

int front = -1, rear = -1, n = 10;

int main()

{

    int x;

    x = isEmpty(); // X will store the value returned by the isEmpty Function

    // "Queue is Empty!" will be printed if x is equal to 1 or "Queue is not Empty!" will be printed if x is equal to 0

    x ? printf("Queue is Empty!\n") : printf("Queue is not Empty!\n");

    // Inserting elements in the queue using the enqueue function

    enqueue(13);

    enqueue(22);

    enqueue(99);

    enqueue(35);

    enqueue(124);

    enqueue(11);

    // Checking how many elements are there in the queue

    x = size();

    printf("The number of elements present in the queue = %d\n", x);

    x = isFull();

    // "Queue is Full!" will be printed if x is equal to 1 or "Queue is not Full!" will be printed if x is equal to 0

    x ? printf("Queue is Full!\n") : printf("Queue is not Full!\n");

    x = isEmpty();

    // "Queue is Empty!" will be printed if x is equal to 1 or "Queue is not Empty!" will be printed if x is equal to 0

    x ? printf("Queue is Empty!\n") : printf("Queue is not Empty!\n");

    x = front_ele();

    // The first statement of the below ternary operator will be executed if the x is not equal to 0

    x ? printf("Front element of the queue = %d\n", x) : printf("No front element. The queue is empty!\n");

    // Deleting and printing all the elements of the queue using the dequeue function

    printf("Elements of queue are: ");

    do

    {

        dequeue();

    } while (front != -1);

    printf("\n");

    // After deleting all the value from the queue, trying to print front element.

    x = front_ele();

    x ? printf("Front element of the queue = %d\n", x) : printf("No front element. The queue is empty!\n");

}

// Function to insert element in the queue

void enqueue(int value)

{

    if (rear == n - 1) // Condition to check whether the queue is Full or not

    {

        printf("Overflow!\n");

        return;

    }

    if (front == -1)

    {

        front = 0;

        rear = 0;

    }

    else

    {

        rear = rear + 1;

    }

    myQueue[rear] = value; // Adding the value after increasing the rear_index by 1

}

// Function to delete element from the queue

void dequeue()

{

    int deleted_ele;

    if (front == -1) // Condition to check whether the queue is empty or not

    {

        printf("Underflow\n");

        return;

    }

    deleted_ele = myQueue[front]; // Storing the value of the front element of the queue

    printf("%d ", deleted_ele);

    /*In the below statements we are increasing the front_index by 1 and if we are deleting the last element,

    we are making rear_index and front_index equal to -1 */

    if (front == rear)

    {

        front = -1;

        rear = -1;

    }

    else

    {

        front++;

    }

}

// Function to check whether the Queue if Full or not

int isFull()

{

    // The function will return 1 if the queue is full otherwise it will return 0

    if (front == 0 && rear == n - 1) // Condition of FULL queue

    {

        return 1;

    }

    return 0;

}

// function to check whether the queue is empty or not

int isEmpty()

{

    // The function will return 1 if the queue is empty otherwise it will return 0

    if (front == -1) // Condition of empty queue

    {

        return 1;

    }

    return 0;

}

// Function to find the number of elements in the queue

int size()

{

    if (front == -1) // It will return zero if the queue is empty

    {

        return 0;

    }

    return rear - front + 1; // It will return the number of elements present in the list

}

// Function to print the front element

int front_ele()

{

    // It will return 0 when the queue is empty otherwise the front element

    if (front == -1)

    {

        return 0;

    }

    return myQueue[front];

}

The output of the above program:

Queue is Empty!

The number of elements present in the queue = 6

Queue is not Full!

Queue is not Empty!

Front element of the queue = 13

Elements of queue are: 13 22 99 35 124 11

No front element. The queue is empty!

Related Topics

Dijkstra’s vs Bellman-Ford Algorithm

The Dijkstra Algorithm One of the SSSP (Single Source Shortest Path) algorithms is Dijkstra's. As a result, it finds the shortest path between a source node and all other nodes in...

7 minutes read.

B Tree in Data Structure

Data management is called database management. A data model is a system that stores, manages, and optimizes computer resources. Data processing is not just about data storage. Almost every app...

9 minutes read.

Stack Using Array

Stack – A Stack is a linear abstract data type used to store elements. It is also called last in first out or first in last out data structure because...

6 minutes read.

Bucket Sort

Bucket Sort: In the sorting algorithm, we create buckets and put elements into them. We can apply some sorting algorithm (insertion sort) to sort the elements in each bucket. Finally,...

4 minutes read.

Segregate Even and Odd nodes in a Linked List

Segregate even and odd nodes in a Linked List In this problem, we have given a linked list with integer numbers. We need to modify the given linked list in such...

4 minutes read.

What is a Tree in Terms of a Graph?

To know the explanation of trees in terms of graphs, we need first to know what trees and graphs are. So let us first learn about trees and graphs. Trees and...

6 minutes read.

What is a Spanning Tree in Data Structure

Data structures Data management is called database management. This allows the computer to sort or organize the data for efficient retrieval. A data model is a system used to store, manage,...

5 minutes read.

Deletion Operation from A B Tree

This article will show the deletion operation through the b tree in C++ programming language. Implementation #include <iostream> using namespace std; class B_TreeNod {   int *kys;   int m;   BTreeNod **C;   int j;   bool leaf;  ...

5 minutes read.

Data Structure Infix to Prefix Conversion

Infix to Prefix Conversion In present time, we use the infix expression in our daily life but the computers are not able to understand this format because they need to keep...

4 minutes read.

Finding the Maximum Element in a Binary Tree

Implementation // Creating a C++ program to excavate the minimum and maximum in a given binary tree. #include <bits/stdc++.h> #include <iostream> using namespace std; // creating a new tree node. class __nod { public: int record; __nod *Lft, *Rt; /*...

4 minutes read.

Heap Sort in Data Structure

Heap Sort: Heap Sort is very useful and efficient sorting algorithm in data structure. We can say it is a comparison base sorting algorithm, similar sort where we will find...

2 minutes read.

Delete a Node without head pointer from the linked list

Delete a Node without head pointer from the linked list This article will explain how to delete a node without a head pointer from the linked list. We have given a...

2 minutes read.

Data structure: Infix to Prefix Conversion

Infix to Prefix Conversion In present time, we use the infix expression in our daily life but the computers are not able to understand this format because they need to keep...

4 minutes read.

Linear vs Circular Queue: Data Structure

Difference Between Linear and Circular Queue What is Linear Queue? A linear queue is linear data structure which works on first in first out principle. We can say a linear queue is...

3 minutes read.

Polish Notation in Data Structures

Arithmetic Expression: An arithmetic expression is defined as several operands or data items combined using several operators. For example; a+b*(c-d) is an expression. Operands: Operands represent the data in an expression...

2 minutes read.

Asynchronous advantage actor-critic (A3C) Algorithm

The Asynchronous advantage actor-critic (A3C) Algorithm is one of the latest algorithms developed by the Artificial Intelligence division, Deep Mind at Google. It is used for the Deep Reinforcement Learning...

3 minutes read.

Serialize and Deserialize Binary Trees

In order to save a tree in a file that can later be restored, serialisation is used. The tree's structure must be preserved. Deserialization involves reading a tree from a...

4 minutes read.

Types of Linked list

Single linked list  A single linked list is a linked list in which all nodes are connected with each other in sequence. Each node of a singly linked list has two...

7 minutes read.

What is a Height-Balanced Tree in Data Structure

A height-balanced tree is a type of binary tree. If the absolute difference between the heights of the left and right subtree is less than or equal to 1, then...

6 minutes read.

Deletion in Binary Search Tree

Implementation #include <iostream> using namespace std; struct _nod {   int ky;   struct _nod *Lft, *Rt; }; // Creating a node in the binary tree. struct _nod *nw_nod(int Itm) {   struct _nod *temp = (struct _nod *)malloc(sizeof(struct...

4 minutes read.