Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a program in Java to implement a d-heap data structure that supports the f

ID: 3839382 • Letter: W

Question

Write a program in Java to implement a d-heap data structure that supports the following operations:

deleteMin (and percolate down)

insert

buildHeap

The value of 'd' is input by the user. A sample inputis given below.

Enter heap elements: 31 16 24 21 13

Enter d: 2

Output: Heap (d=2): 13 16 24 31 21

Press 1) for insert, 2) for deleteMin, 3) for new d value, 4) to quit

Enter choice: 1

Enter element to insert: 6

Output: Heap (d=2): 6 16 13 31 21 24

Press 1) for insert, 2) for deleteMin, 3) for new d value, 4) to quit

Enter choice: 1

Enter element to insert: 20

Output: Heap (d=2): 6 16 13 31 21 24 20

Press 1) for insert, 2) for deleteMin, 3) for new d value, 4) to quit

Enter choice: 2

Output: Heap (d=2): 13 16 20 31 21 24

Enter choice: 3

Enter d: 3

Output: Heap (d=3): 13 16 20 31 21 24

Press 1) for insert, 2) for deleteMin, 3) for new d value, 4) to quit

Enter choice: 3

Enter d: 4

Output: Heap with d=4: 13 16 20 31 21 24

Press 1) for insert, 2) for deleteMin, 3) for new d value, 4) to quit

Enter choice: 4

Program Terminated

Your program will be tested with a larger heap with more elements and different d values.

Explanation / Answer

code:-

import java.util.Scanner;

import java.util.Arrays;

import java.util.NoSuchElementException;

/** Class BinaryHeap **/

class BinaryHeap  

{

    /** The number of children each node has **/

    private static final int d = 2;

    private int heapSize;

    private int[] heap;

    /** Constructor **/  

    public BinaryHeap(int capacity)

    {

        heapSize = 0;

        heap = new int[capacity + 1];

        Arrays.fill(heap, -1);

    }

    /** Function to check if heap is empty **/

    public boolean isEmpty( )

    {

        return heapSize == 0;

    }

    /** Check if heap is full **/

    public boolean isFull( )

    {

        return heapSize == heap.length;

    }

    /** Clear heap */

    public void makeEmpty( )

    {

        heapSize = 0;

    }

    /** Function to get index parent of i **/

    private int parent(int i)

    {

        return (i - 1)/d;

    }

    /** Function to get index of k th child of i **/

    private int kthChild(int i, int k)

    {

        return d * i + k;

    }

    /** Function to insert element */

    public void insert(int x)

    {

        if (isFull( ) )

            throw new NoSuchElementException("Overflow Exception");

        /** Percolate up **/

        heap[heapSize++] = x;

        heapifyUp(heapSize - 1);

    }

    /** Function to find least element **/

    public int findMin( )

    {

        if (isEmpty() )

            throw new NoSuchElementException("Underflow Exception");         

        return heap[0];

    }

    /** Function to delete min element **/

    public int deleteMin()

    {

        int keyItem = heap[0];

        delete(0);

        return keyItem;

    }

    /** Function to delete element at an index **/

    public int delete(int ind)

    {

        if (isEmpty() )

            throw new NoSuchElementException("Underflow Exception");

        int keyItem = heap[ind];

        heap[ind] = heap[heapSize - 1];

        heapSize--;

        heapifyDown(ind);      

        return keyItem;

    }

    /** Function heapifyUp **/

    private void heapifyUp(int childInd)

    {

        int tmp = heap[childInd];  

        while (childInd > 0 && tmp < heap[parent(childInd)])

        {

            heap[childInd] = heap[ parent(childInd) ];

            childInd = parent(childInd);

        }                 

        heap[childInd] = tmp;

    }

    /** Function heapifyDown **/

    private void heapifyDown(int ind)

    {

        int child;

        int tmp = heap[ ind ];

        while (kthChild(ind, 1) < heapSize)

        {

            child = minChild(ind);

            if (heap[child] < tmp)

                heap[ind] = heap[child];

            else

                break;

            ind = child;

        }

        heap[ind] = tmp;

    }

    /** Function to get smallest child **/

    private int minChild(int ind)

    {

        int bestChild = kthChild(ind, 1);

        int k = 2;

        int pos = kthChild(ind, k);

        while ((k <= d) && (pos < heapSize))

        {

            if (heap[pos] < heap[bestChild])

                bestChild = pos;

            pos = kthChild(ind, k++);

        }  

        return bestChild;

    }

    /** Function to print heap **/

    public void printHeap()

    {

        System.out.print(" Heap = ");

        for (int i = 0; i < heapSize; i++)

            System.out.print(heap[i] +" ");

        System.out.println();

    }   

}

/** Class BinaryHeapTest **/

public class BinaryHeapTest

{

    public static void main(String[] args)

    {

        Scanner scan = new Scanner(System.in);

        System.out.println("Binary Heap Test ");

        System.out.println("Enter size of Binary heap");

        /** Make object of BinaryHeap **/

        BinaryHeap bh = new BinaryHeap(scan.nextInt() );

        char ch;

        /** Perform Binary Heap operations **/

        do  

        {

            System.out.println(" Binary Heap Operations ");

            System.out.println("1. insert ");

            System.out.println("2. delete min");

            System.out.println("3. check full");          

            System.out.println("4. check empty");

            System.out.println("5. clear");

            int choice = scan.nextInt();          

            switch (choice)

            {

            case 1 :

                try

                {

                    System.out.println("Enter integer element to insert");

                    bh.insert( scan.nextInt() );

                }

                catch (Exception e)

                {

                    System.out.println(e.getMessage() );

                }

                break;                        

            case 2 :

                try

                {

                    System.out.println("Min Element : "+ bh.deleteMin());

                }

                catch (Exception e)

                {

                    System.out.println(e.getMessage() );

                }               

                break;                              

            case 3 :

                System.out.println("Full status = "+ bh.isFull());

                break;                                 

            case 4 :

                System.out.println("Empty status = "+ bh.isEmpty());

                break;

            case 5 :

                bh.makeEmpty();

                System.out.println("Heap Cleared ");

                break;       

            default :

                System.out.println("Wrong Entry ");

                break;

            }

            /** Display heap **/

            bh.printHeap();

            System.out.println(" Do you want to continue (Type y or n) ");

            ch = scan.next().charAt(0);                      

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

    }

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote