VList is a data structure that combines fast indexing of arrays with the easy extension of singly-linked lists. VList generally supports the following functions.
- Insert Element
- Get Element at index k
- Clear List
- Display List
- Etc.
VList has rows connected as Singly Linked List where the Nth row contains maximum 2^N elements.
Example:
VList: [2] ↓ [1, 3] ↓ [5, 1, 5, 8] ↓ [10, 12, 5, 9, 1, 0, 8, 7] ↓ [3, 5, 7]
VList is Filled first Left to Right Then Top to Bottom.
Implementation:
Java
// Java Program to Implement VList   import java.io.*; import java.util.*;   // This will act as each row of VList class VListNode {     VListNode next;     List<Integer> list;       public VListNode()     {         next = null ;         list = new ArrayList<Integer>();     } }   class VList {       private VListNode start;     private VListNode end;     private int nodeNumber;     private int size;       // Constructor of VList     public VList()     {         start = null ;         end = null ;         nodeNumber = 0 ;         size = 0 ;     }       // Check if VList is Empty or Not     public boolean isEmpty() { return start == null ; }       // Get Number of Elements in VList     public void getSize()     {         System.out.println( "VList size : " + size);         System.out.println();     }       // Make VList Empty     public void clearVList()     {         start = null ;         end = null ;         nodeNumber = 0 ;         size = 0 ;           System.out.println( "VList is Cleared" );         System.out.println();     }       // Insert a new Element in VList     public void insert( int x)     {         size++;         int n = ( int )Math.pow( 2 , nodeNumber);           if (start == null ) {             start = new VListNode();             start.list.add(x);             end = start;             return ;         }           if (end.list.size() + 1 <= n) {             end.list.add(x);         }         else {             nodeNumber++;               VListNode tempNode = new VListNode();             tempNode.list.add(x);               end.next = tempNode;             end = tempNode;         }     }       // Get value of Element at index k in VList     public void searchElementWithPosition( int k)     {         System.out.print( "Element at position " + k                          + " is = " );           if (k < 1 || k > size) {             System.out.println( "Does not Exist" );             System.out.println();             return ;         }           k--;         VListNode startTemp = start;           while (k >= startTemp.list.size()) {             k -= startTemp.list.size();             startTemp = startTemp.next;         }           System.out.println(startTemp.list.get(k));         System.out.println();     }       // Print full VList     public void displayVList()     {         System.out.print( "VList : " );         if (size == 0 ) {             System.out.print( "empty\n" );             return ;         }           System.out.println();           VListNode startTemp = start;         int num = 0 ;           while (startTemp != null ) {             for ( int i = 0 ; i < startTemp.list.size();                  i++) {                 System.out.print(startTemp.list.get(i)                                  + " " );             }               System.out.println();               startTemp = startTemp.next;             num++;         }           System.out.println();     } }   class GFG {     public static void main(String[] args)     {         // Driver Code           // Initialize Vlist         VList vlist = new VList();           int [] arr             = new int [] { 9 , 1 , 5 , 4 , 3 , 5 , 2 , 1 , 0 , 8 };           // Insert Elements in VList         for ( int val : arr) {             vlist.insert(val);         }           // Display VList         vlist.displayVList();           // Search 1st Element         vlist.searchElementWithPosition( 1 );           // Search 5th Element         vlist.searchElementWithPosition( 5 );           // Search 8th Element         vlist.searchElementWithPosition( 8 );           vlist.getSize();           // Make List Empty         vlist.clearVList();           System.out.println( "Vlist IsEmpty = "                            + vlist.isEmpty());     } } |
VList : 9 1 5 4 3 5 2 1 0 8 Element at position 1 is = 9 Element at position 5 is = 3 Element at position 8 is = 1 VList size : 10 VList is Cleared Vlist IsEmpty = true
Time Complexity:
- Insert operation: O(1)Â
- Search operation: O(log(n))
- Display: O(n)
- Get Size & Check Empty: O(1)