Open In App

Basic Operations for Queue Data Structure

Last Updated : 23 Sep, 2025
Comments
Improve
Suggest changes
8 Likes
Like
Report

Queue is a linear data structure that follows the FIFO (First In First Out) principle, where insertion is done at the rear end and deletion is done from the front end.

The following are some fundamental operations that allow us to add, remove, and access elements efficiently.

  • enqueue() - Insertion of elements to the queue.
  • dequeue() - Removal of elements from the queue.
  • getFront()- Acquires the data element available at the front node of the queue without deleting it.
  • getRear() - This operation returns the element at the rear end without removing it.
  • isEmpty() - Checks if the queue is empty.
  • size() - This operation returns the size of the queue i.e. the total number of elements it contains.

We will now see how to perform these operations on Queue.

enqueue()

Enqueue operation inserts an element at the end of the queue i.e. at the rear end.

C++
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> q;

    // inserting elements at rear
    q.push(1);
    q.push(8);
    q.push(3);

    return 0;
}
Java
import java.util.LinkedList;
import java.util.Queue;

class GfG {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        // inserting elements at rear
        q.add(10);
        q.add(20);
        q.add(30);
    }
}
Python
from collections import deque

if __name__ == "__main__":
    q = deque()

    # inserting elements at rear
    q.append(10)
    q.append(20)
    q.append(30)
C#
using System;
using System.Collections.Generic;

class GfG {
    static void Main() {
        Queue<int> q = new Queue<int>();

        // inserting elements at rear
        q.Enqueue(10);
        q.Enqueue(20);
        q.Enqueue(30);
    }
}
JavaScript
// Driver Code

// using array as queue
let q = [];

// inserting elements at rear
q.push(10);
q.push(20);
q.push(30);

Time Complexity: O(1), since inserting at the rear takes constant time.
Auxiliary Space: O(1)

Note: If the queue is implemented using a fixed-size array, inserting an element into a full stack will cause an overflow condition.

dequeue()

Dequeue operation removes element that is at the front end of the queue.


C++
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> q;

    // inserting elements at rear
    q.push(1);
    q.push(8);
    q.push(3);

    // deleting element from front
    q.pop();

    return 0;
}
Java
import java.util.LinkedList;
import java.util.Queue;

public class GfG{
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        // inserting elements at rear
        q.add(1);
        q.add(8);
        q.add(3);

        // deleting element from front
        q.poll();
    }
}
Python
from collections import deque

if __name__ == "__main__":
    q = deque()
    
    # inserting elements at rear
    q.append(1)
    q.append(8)
    q.append(3)
    
    # deleting element from front
    q.popleft()
C#
using System;
using System.Collections.Generic;

public class GfG {
    public static void Main() {
        Queue<int> q = new Queue<int>();

        // inserting elements at rear
        q.Enqueue(1);
        q.Enqueue(8);
        q.Enqueue(3);

        // deleting element from front
        q.Dequeue();
    }
}
JavaScript
// Driver Code

let q = [];

// inserting elements at rear
q.push(1);
q.push(8);
q.push(3);

// deleting element from front
q.shift();

Time Complexity: O(1), since deleting from the front takes constant time.
In JavaScript, there’s no built-in queue, so we use arrays. Removing elements with q.shift() takes O(n) time because all elements are re-indexed.

Auxiliary Space: O(1)

Note: If a queue is empty, deleting an element will cause an underflow condition.

getFront()

getFront will returns the element at the front end of the queue without removing it.

getFront


C++
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> q;

    // inserting elements at rear
    q.push(1);
    q.push(8);
    q.push(3);

    // getting the front element
    cout << q.front() << endl;

    return 0;
}
Java
import java.util.LinkedList;
import java.util.Queue;

public class GfG {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        // inserting elements at rear
        q.add(1);
        q.add(8);
        q.add(3);

        // getting the front element
        System.out.println(q.peek());
    }
}
Python
from collections import deque

if __name__ == "__main__":

    q = deque()
    
    # inserting elements at rear
    q.append(1)
    q.append(8)
    q.append(3)
    
    # getting the front element
    print(q[0])
C#
using System;
using System.Collections.Generic;

public class GfG {
    public static void Main() {
        Queue<int> q = new Queue<int>();

        // inserting elements at rear
        q.Enqueue(1);
        q.Enqueue(8);
        q.Enqueue(3);

        // getting the front element
        Console.WriteLine(q.Peek());
    }
}
JavaScript
// Driver Code

let q = [];

// inserting elements at rear
q.push(1);
q.push(8);
q.push(3);

// getting the front element
console.log(q[0]);

Output
1

Time Complexity: O(1), since accessing the front element takes constant time.
Auxiliary Space: O(1)

getRear()

getRear will returns the element at the rear end without removing it.

getrear


C++
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> q;

    q.push(1);
    q.push(8);
    q.push(3);

    // get rear element
    cout << q.back() << endl;

    return 0;
}
Java
import java.util.LinkedList;
import java.util.Queue;

class GfG {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        q.add(1);
        q.add(8);
        q.add(3);

        // get rear element (last enqueued)
        System.out.println(((LinkedList<Integer>) q).getLast());
    }
}
Python
from collections import deque

if __name__ == "__main__":
    q = deque()
    
    q.append(1)
    q.append(8)
    q.append(3)
    
    # get rear element
    print(q[-1])
C#
using System;
using System.Collections.Generic;
using System.Linq;

class GfG {
    public static void Main() {
        Queue<int> q = new Queue<int>();

        q.Enqueue(1);
        q.Enqueue(8);
        q.Enqueue(3);

        // get rear element
        Console.WriteLine(q.Last());
    }
}
JavaScript
// Driver Code

let q = [];

q.push(1);
q.push(8);
q.push(3);

// get rear element
console.log(q[q.length - 1]);

Output
3

Time Complexity: O(1)
Auxiliary Space: O(1)

isEmpty

isEmpty returns a boolean value that indicates whether the queue is empty or not.

is-empty
C++
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> q;

    q.push(5);
    q.push(9);

    // check if queue is empty
    if (q.empty())
        cout << "Queue is empty" << endl;
    else
        cout << "Queue is not empty" << endl;

    return 0;
}
Java
import java.util.LinkedList;
import java.util.Queue;

public class GfG {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        q.add(5);
        q.add(9);

        // check if queue is empty
        if (q.isEmpty())
            System.out.println("Queue is empty");
        else
            System.out.println("Queue is not empty");
    }
}
Python
from collections import deque

if __name__ == "__main__":
    q = deque()
    
    q.append(5)
    q.append(9)
    
    # check if queue is empty
    if not q:
        print("Queue is empty")
    else:
        print("Queue is not empty")
C#
using System;
using System.Collections.Generic;

public class GfG {
    public static void Main() {
        
        Queue<int> q = new Queue<int>();

        q.Enqueue(5);
        q.Enqueue(9);

        // check if queue is empty
        if (q.Count == 0)
            Console.WriteLine("Queue is empty");
        else
            Console.WriteLine("Queue is not empty");
    }
}
JavaScript
// Driver Code

let q = [];

q.push(5);
q.push(9);

// check if queue is empty
if (q.length === 0)
    console.log("Queue is empty");
else
    console.log("Queue is not empty");

Output
Queue is not empty

Time Complexity: O(1)
Auxiliary Space: O(1)

Size()

Size returns the size of the queue i.e. the total number of elements it contains.

size


C++
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> q;

    q.push(2);
    q.push(7);
    q.push(4);

    // get size of queue
    cout << q.size() << endl;

    return 0;
}
Java
import java.util.Queue;
import java.util.LinkedList;

public class GfG {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        q.add(2);
        q.add(7);
        q.add(4);

        // get size of queue
        System.out.println(q.size());
    }
}
Python
from collections import deque

if __name__ == "__main__":
    q = deque()
    
    q.append(2)
    q.append(7)
    q.append(4)
    
    # get size of queue
    print(len(q))
C#
using System;
using System.Collections.Generic;

public class GfG {
    public static void Main() {
        Queue<int> q = new Queue<int>();

        q.Enqueue(2);
        q.Enqueue(7);
        q.Enqueue(4);

        // get size of queue
        Console.WriteLine(q.Count);
    }
}
JavaScript
// Driver Code

let q = [];

q.push(2);
q.push(7);
q.push(4);

// get size of queue
console.log(q.length);

Time Complexity: O(1)
Auxiliary Space: O(1)


Queue Data Structure
Visit Course explore course icon
Video Thumbnail

Queue Data Structure

Video Thumbnail

Application of Queue Data structure

Article Tags :

Explore