Skip to content
Related Articles

Related Articles

Improve Article
Circular array

An array is called circular if we consider the first element as next of the last element. Circular arrays are used to implement queue (Refer to this and this).
An example problem : 
Suppose n people are sitting at a circular table with names A, B, C, D, … Given a name, we need to print all n people (in order) starting from the given name. 
                                      

 For example, consider 6 people A B C D E F and given name as ‘D’. People sitting in a circular manner starting from D are D E F A B C.
A simple solution is to create an auxiliary array of size 2*n and store it in another array. For example for 6 people, we create below the auxiliary array. 
A B C D E F A B C D E F 
Now for any given index, we simply print n elements starting from it. For example, we print the following 6. 
A B C D E F A B C D E F 

Below is the implementation of the above approach. 

C++




// CPP program to demonstrate use of circular
// array using extra memory space
#include <bits/stdc++.h>
using namespace std;
void print(char a[], int n, int ind)
{
    // Create an auxiliary array of twice size.
    char b[(2 * n)];
 
    // Copy a[] to b[] two times
    for (int i = 0; i < n; i++)
        b[i] = b[n + i] = a[i];
 
    // print from ind-th index to (n+i)th index.
    for (int i = ind; i < n + ind; i++)
        cout << b[i] << " ";
}
 
// Driver code
int main()
{
    char a[] = { 'A', 'B', 'C', 'D', 'E', 'F' };
    int n = sizeof(a) / sizeof(a[0]);
    print(a, n, 3);
    return 0;
}

Java




// Java program to demonstrate use of circular
// array using extra memory space
import java.util.*;
import java.lang.*;
 
public class GfG{
     
    public static void print(char a[], int n,
                                  int ind){
     
        // Create an auxiliary array
        // of twice size.
        char[] b = new char[(2 * n)];
 
        // Copy a[] to b[] two times
        for (int i = 0; i < n; i++)
            b[i] = b[n + i] = a[i];
 
        // print from ind-th index to
        // (n+i)th index.
        for (int i = ind; i < n + ind; i++)
            System.out.print(b[i]+" ");
    }
     
    // Driver code
    public static void main(String argc[]){
        char[] a = new char[]{ 'A', 'B', 'C',
                             'D', 'E', 'F' };
        int n = 6;
        print(a, n, 3);
    }
}
 
/* This code is contributed by Sagar Shukla */

Python3




# Python3 program to demonstrate use of
# circular array using extra memory space
 
def prints(a, n, ind):
     
    # Create an auxiliary array of twice size.
    b = [None]*2*n
    i = 0
     
    # Copy a[] to b[] two times
    while i < n:
        b[i] = b[n + i] = a[i]
        i = i + 1
     
    i = ind
 
    # print from ind-th index to (n+i)th index.
    while i < n + ind :
        print(b[i], end = " ");
        i = i + 1
 
# Driver Code
a = ['A', 'B', 'C', 'D', 'E', 'F']
n = len(a);
prints(a, n, 3);
 
#This code is contributed by rishabh_jain

C#




// C# program to demonstrate use of circular
// array using extra memory space
using System;
 
public class GfG {
 
    public static void print(char[] a, int n,
                                     int ind)
    {
        // Create an auxiliary array
        // of twice size.
        char[] b = new char[(2 * n)];
 
        // Copy a[] to b[] two times
        for (int i = 0; i < n; i++)
            b[i] = b[n + i] = a[i];
 
        // print from ind-th index to
        // (n+i)th index.
        for (int i = ind; i < n + ind; i++)
            Console.Write(b[i] + " ");
    }
 
    // Driver code
    public static void Main()
    {
        char[] a = new char[] { 'A', 'B', 'C',
                                'D', 'E', 'F' };
        int n = 6;
        print(a, n, 3);
    }
}
 
/* This code is contributed by vt_m*/

Javascript




<script>
// javascript program to demonstrate use of circular
// array using extra memory space
 
 
    function print( a , n , ind) {
 
        // Create an auxiliary array
        // of twice size.
        var b = Array(2 * n);
 
        // Copy a to b two times
        for (i = 0; i < n; i++)
            b[i] = b[n + i] = a[i];
 
        // prvar from ind-th index to
        // (n+i)th index.
        for (i = ind; i < n + ind; i++)
            document.write(b[i] + " ");
    }
 
    // Driver code
     
        var a = [ 'A', 'B', 'C', 'D', 'E', 'F' ];
        var n = 6;
        print(a, n, 3);
 
// This code is contributed by todaysgaurav
</script>

Output:  



D E F A B C 

This approach takes of O(n) time but takes extra space of order O(n)

An efficient solution is to deal with circular arrays using the same array. If a careful observation is run through the array, then after n-th index, the next index always starts from 0 so using the mod operator, we can easily access the elements of the circular list, if we use (i)%n and run the loop from i-th index to n+i-th index. and apply mod we can do the traversal in a circular array within the given array without using any extra space. 

C++




// CPP program to demonstrate the use of circular
// array without using extra memory space
#include <bits/stdc++.h>
using namespace std;
 
// function to print circular list starting
// from given index ind.
void print(char a[], int n, int ind)
{
    // print from ind-th index to (n+i)th index.
    for (int i = ind; i < n + ind; i++)
        cout << a[(i % n)] << " ";
}
 
// Driver code
int main()
{
    char a[] = { 'A', 'B', 'C', 'D', 'E', 'F' };
    int n = sizeof(a) / sizeof(a[0]);
    print(a, n, 3);
    return 0;
}

Java




// Java program to demonstrate use of circular
// array using extra memory space
import java.util.*;
import java.lang.*;
 
public class GfG{
     
    // function to print circular list
    // starting from given index ind.
    public static void print(char a[], int n,
                                   int ind){
         
        // print from ind-th index to
        // (n+i)th index.
        for (int i = ind; i < n + ind; i++)
            System.out.print(a[(i % n)] + " ");
    }
     
    // driver code
    public static void main(String argc[]){
        char[] a = new char[]{ 'A', 'B', 'C',
                             'D', 'E', 'F' };
        int n = 6;
        print(a, n, 3);
    }
}
 
/* This code is contributed by Sagar Shukla */

Python3




# Python3 program to demonstrate the use of
# circular array without using extra memory space
 
# function to print circular list starting
# from given index ind.
def prints(a, n, ind):
    i = ind
     
    # print from ind-th index to (n+i)th index.
    while i < n + ind :
        print(a[(i % n)], end = " ")
        i = i + 1
 
# Driver Code
a = ['A', 'B', 'C', 'D', 'E', 'F']
n = len(a);
prints(a, n, 3);
 
# This code is contributed by rishabh_jain

C#




// C# program to demonstrate use of circular
// array without using extra memory space
using System;
 
public class GfG {
 
    // function to print circular list
    // starting from given index ind.
    public static void print(char[] a, int n,
                                     int ind)
    {
        // print from ind-th index to
        // (n+i)th index.
        for (int i = ind; i < n + ind; i++)
            Console.Write(a[(i % n)] + " ");
    }
 
    // driver code
    public static void Main()
    {
        char[] a = new char[] { 'A', 'B', 'C',
                                'D', 'E', 'F' };
        int n = 6;
        print(a, n, 3);
    }
}
 
/* This code is contributed by vt_m */

PHP




<?php
// PHP program to demonstrate use
// of circular array without using
// extra memory space
 
// function to print circular list
// starting from given index ind.
function prin($a, $n, $ind)
{
    // print from ind-th index
    // to (n+i)th index.
    for ($i = $ind; $i < $n + $ind; $i++)
        echo $a[($i % $n)] . " ";
}
 
// Driver Code
$a = array( 'A', 'B', 'C',
            'D', 'E', 'F' );
$n = count($a);
prin($a, $n, 3);
 
// This code is contributed by Sam007
?>

Javascript




<script>
// javascript program to demonstrate use of circular
// array using extra memory space
 
    // function to prvar circular list
    // starting from given index ind.
    function print(a, n, ind)
    {
 
        // prvar from ind-th index to
        // (n+i)th index.
        for (var i = ind; i < n + ind; i++)
            document.write(a[parseInt(i % n)] + " ");
    }
 
    // Driver code
        var a =[ 'A', 'B', 'C', 'D', 'E', 'F' ];
        var n = 6;
        print(a, n, 3);
 
// This code is contributed by Rajput-Ji
</script>

Output :  

D E F A B C 

This approach takes O(n) time and O(1) extra space.
More problems based on circular array : 

Recent articles on circular array.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live 




My Personal Notes arrow_drop_up
Recommended Articles
Page :