×

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

Stack vs Heap Memory Allocation Data Structure

Difference Between Stack and Heap Memory Allocation Stack Memory Stack memory allocation is a way to use the system memory as a temporary storage of the data which is act like last-in-first-out...

3 minutes read.

Delete N nodes after M nodes of a linked list

Delete N nodes after M nodes of a linked list In this problem, we have given a linked list and two integers M and N. We need to traverse the linked...

3 minutes read.

Berkley’s Algorithm

Berkley’s Algorithm is mainly used in clock synchronization system. It is used in distributed systems. To implement this algorithm, we have to think that the network has no accurate time...

4 minutes read.

Counting Sort

Counting Sort: Counting sort is a sorting algorithm that is used to sort the elements of the array within a specific range. It counts the same element number of the...

3 minutes read.

FLEX (Fast Lexical Analyzer Generator)

FLEX stands for Fast Lexical Analyzer Generator. Around 1987, Vern Paxson created Flex in C with a great deal of input and inspiration from Van Jacobson. Van Jacobson's approach is...

3 minutes read.

Implementation of stack

Implementation of stack: The stack can be implemented in two ways: using array and using a linked list. The pop and push operations in the array are simpler than the...

3 minutes read.

Understanding Data Processing

Introduction Data In our everyday lives, any task that we perform online is related to data. Millions of pieces of data are produced every second across the globe. Data production is largely...

4 minutes read.

2-3 Trees and Basic Operations on them

2-3 Trees, like any other AVL trees or B-trees, are just a type of Height Balanced Tree. 2-3 Trees are the B-trees of order 3. Like every other B-tree, the...

4 minutes read.

Difference between Structured and Object-Oriented Analysis

Analysis means observing and collecting relevant information about the structure of something or the basic details of a system's requirements. Structured and Object Oriented Analysis are both widely used in...

2 minutes read.

What are Forest Trees in Data Structure

Data structure A data model manages and optimizes computer resources, and a database stores and manages data. It's one of many uses for data structures to hold data. Data structures come...

5 minutes read.

Identical Linked Lists

Identical Linked Lists In this problem, we have given two linked lists, and we need to check whether the given linked lists are identical or not. Identical means they have the...

4 minutes read.

Reverse the Singly Linked List in C

Reverse the Singly Linked List in C This article has given a singly linked list and will reverse the linked list by changing the links between nodes. Example:                         Input:  2 -> 4...

3 minutes read.

Boruvkas algorithm

This algorithm is used for finding minimum spanning tree from a weighted graph. Like prim’s and kruskal’s algorithm it is also a greedy algorithm. Note:What is the minimum spanning tree?We know...

4 minutes read.

Bubble Sort vs Quick Sort

In this article, we are going to compare two sorting techniques, Bubble sort and Quick Sort. In starting, we will first discuss the idea of sorting an array using bubble...

7 minutes read.

Data Structure Prefix to Postfix Conversion

Prefix to Postfix Conversion Prefix: As the name suggests if the operator placed before the operands called the prefix expression.  The form of prefix expression is (operator, operand1, operand2). Example:  *+EF-GH (Infix:...

2 minutes read.

Interval Tree

Interval Tree Interval Tree: The concept is to increase a Binary Search Tree self-balancing such as Red Black Tree, and AVL Tree, so that every feature can be completed in time O(Logn). Each Interval...

4 minutes read.

Quick Sort vs Merge Sort

In this article, we will take an overview of Quick Sort and Merge Sort and then discuss the differences between them. What is Quick Sort? Quick Sort – The idea behind the...

7 minutes read.

Bubble Sort in Data Structures

Bubble Sort in C++ The bubble sort algorithm analyses two adjacent elements and swaps them until they are no longer in the desired order. Each iteration moves each member of the array...

4 minutes read.

Merge two sorted linked lists

Merge two sorted linked lists In this article, we are going to learn how to merge two linked lists. Here we have given two linked lists that are sorted in increasing...

7 minutes read.

Invert binary tree

Invert binary tree is a mirror image of a tree. It is pretty much the same compared to the only difference: its left and right children are swapped with the...

4 minutes read.