Wednesday, 29 November 2017

Java Program to Implement Skip List


Code:

import java.util.Scanner;

/* Class SkipNode */
class SkipNode        
{
    int element;
    SkipNode right;
    SkipNode down;

    /* Constructor */
    public SkipNode(int x)
    {
        this(x, null, null);
    }
    /* Constructor */
    public SkipNode(int x, SkipNode rt, SkipNode dt)
    {
        element = x;
        right = rt;
        down = dt;
    }
}

/* Class SkipList */
class SkipList
{
    private SkipNode header;
    private int infinity;
    private SkipNode bottom = null;
    private SkipNode tail = null;

    /* Constructor */
    public SkipList(int inf)
    {
        infinity = inf;
        bottom = new SkipNode(0);
        bottom.right = bottom.down = bottom;
        tail = new SkipNode(infinity);
        tail.right = tail;
        header = new SkipNode(infinity, tail, bottom);
    }
    /* Function to insert element */
    public void insert(int x)
    {
        SkipNode current = header;
        bottom.element = x;
        while (current != bottom)
        {
            while (current.element < x)
            current = current.right;
            /*  If gap size is 3 or at bottom level and must insert, then promote middle element */
            if (current.down.right.right.element < current.element)
            {
                current.right = new SkipNode(current.element, current.right, current.down.right.right);
                current.element = current.down.right.element;
            }
            else
                current = current.down;
        }
        /* Raise height of skiplist if necessary */
        if (header.right != tail)
            header = new SkipNode(infinity, tail, header);
    }
    /* Function to clear list */
    public void makeEmpty()
    {
        header.right = tail;
        header.down = bottom;
    }
    /* Function to check if empty */
    public boolean isEmpty()
    {
        return header.right == tail && header.down == bottom;
    }
    /* Function to get node at a position */
    private int elementAt(SkipNode t)
    {
        return t == bottom ? 0 : t.element;
    }
    /* Function to print list */
    public void printList()
    {
        System.out.print("\nSkiplist = ");
        SkipNode current = header;
        while( current.down != bottom )
            current = current.down;
        while (current.right != tail )
        {
            System.out.print(current.element +" ");
            current = current.right;
        }
        System.out.println();
    }   
}

/* Class SkipListTest */
public class SkipListTest    
{    
    public static void main(String[] args)
    {            
        Scanner scan = new Scanner(System.in);
        /* Creating object of SkipList */
        SkipList sl = new SkipList(100000000); 
        System.out.println("SkipList List Test\n");          
        char ch;
        /*  Perform list operations  */
        do
        {
            System.out.println("\nSkipList List Operations\n");
            System.out.println("1. insert");
            System.out.println("2. check empty");
            System.out.println("3. clear");

            int choice = scan.nextInt();            
            switch (choice)
            {
            case 1 : 
                System.out.println("Enter integer element to insert");
                sl.insert( scan.nextInt() );   
                break;                          
            case 2 : 
                System.out.println("Empty status = "+ sl.isEmpty());
                break;            
            case 3 : 
                System.out.println("List cleared\n");
                sl.makeEmpty();
                break;                         
            default : 
                System.out.println("Wrong Entry \n ");
                break;   
            }    
            /*  Display List  */ 
            sl.printList();
            System.out.println("\nDo you want to continue (Type y or n) \n");
            ch = scan.next().charAt(0);    

        } while (ch == 'Y'|| ch == 'y');               
    }
}


Output:

SkipList List Test


SkipList List Operations

1. insert
2. check empty
3. clear
1
Enter integer element to insert
45

Skiplist = 45

Do you want to continue (Type y or n)

y

SkipList List Operations

1. insert
2. check empty
3. clear
1
Enter integer element to insert
23

Skiplist = 23 45

Do you want to continue (Type y or n)

y

SkipList List Operations

1. insert
2. check empty
3. clear
1
Enter integer element to insert
87

Skiplist = 23 45 87

Do you want to continue (Type y or n)

y

SkipList List Operations

1. insert
2. check empty
3. clear
1
Enter integer element to insert
56

Skiplist = 23 45 56 87

Do you want to continue (Type y or n)

y

SkipList List Operations

1. insert
2. check empty
3. clear
1
Enter integer element to insert
19

Skiplist = 19 23 45 56 87

Do you want to continue (Type y or n)

y

SkipList List Operations

1. insert
2. check empty
3. clear
1
Enter integer element to insert
81

Skiplist = 19 23 45 56 81 87

Do you want to continue (Type y or n)

y

SkipList List Operations

1. insert
2. check empty
3. clear
1
Enter integer element to insert
23

Skiplist = 19 23 45 56 81 87

Do you want to continue (Type y or n)

y

SkipList List Operations

1. insert
2. check empty
3. clear
3
List cleared


Skiplist =

Do you want to continue (Type y or n)

y

SkipList List Operations

1. insert
2. check empty
3. clear
2
Empty status = true

Skiplist =

Do you want to continue (Type y or n)

n



More Java Programs:

















100+ Best Home Decoration Ideas For Christmas Day 2019 To Make Home Beautiful

Best gifts for Christmas Day | Greeting cards for Christmas Day | Gift your children a new gift on Christmas day This Christmas d...