Friday 24 November 2017

C++ Program to Implement D-ary-Heap


Code:

#include   iostream
#include   cstring
#include   cstdlib
using namespace std;
/*
 *   D-ary Heap Class
 */
class DaryHeap
{
    private:
        int d;
        int currentSize;
        int size;
        int *array;
    public:
        /*
         * Constructor 
         */
        DaryHeap(int capacity, int numKids)
        {
            currentSize = 0;
            d = numKids;
            size = capacity + 1;
            array = new int[capacity + 1];
            for (int i = 0 ; i < capacity + 1; i++)
                array[i] = -1;
        }

        /*
         * Constructor , filling up heap with a given array 
         */
        DaryHeap(int* array, int numKids)
        {
            int i = 0;
            while (array[i] != -1)
                i++;
            currentSize = i;
            this->array = array;
            this->d = numKids;
            buildHeap();
        }

        /*
         * Function to check if heap is empty 
         */
        bool isEmpty()
        {
            return currentSize == 0;
        }

        /*
         * Check if heap is full 
         */
        bool isFull()
        {
            return currentSize == size;
        }

        /*
         * Clear heap 
         */
        void makeEmpty( )
        {
            currentSize = 0;
        }

        /*
         * Function to  get index parent of i 
         */
        int parent(int i)
        {
            return (i - 1) / d;
        }

        /*
         * Function to get index of k th child of i 
         */
        int kthChild(int i, int k)
        {
            return d * i + k;
        }

        /*
         * Function to inset element 
         */
        void insert(int x)
        {
            if (isFull())
            {
                cout<<"Array Out of Bounds"<
                return;
            }
            int hole = currentSize;
            currentSize++;
            array[hole] = x;
            percolateUp(hole);
        }

        /*
         * Function to find least element 
         */
        int findMin()
        {
            if (isEmpty())
            {
                cout<<"Array Underflow"<
                return 0;
            }
            return array[0];
        }
        /*
         * Function to delete element at an index 
         */
        int Delete(int hole)
        {
            if (isEmpty())
            {
                cout<<"Array Underflow"<
                return 0;
            }
            int keyItem = array[hole];
            array[hole] = array[currentSize - 1];
            currentSize--;
            percolateDown( hole );
            return keyItem;
        }

        /*
         * Function to build heap 
         */
        void buildHeap()
        {
            for (int i = currentSize - 1 ; i >= 0; i--)
                percolateDown(i);
        }

        /*
         * Function percolateDown 
         */
        void percolateDown(int hole)
        {
            int child;
            int tmp = array[hole];
            for ( ; kthChild(hole, 1) < currentSize; hole = child)
            {
                child = smallestChild( hole );
                if (array[child] < tmp)
                    array[hole] = array[child];
                else
                    break;
            }
            array[hole] = tmp;
        }

        /*
         * Function to get smallest child from all valid indices 
         */
        int smallestChild(int hole)
        {
            int bestChildYet = kthChild(hole, 1);
            int k = 2;
            int candidateChild = kthChild(hole, k);
            while ((k <= d) && (candidateChild < currentSize))
            {
                if (array[candidateChild] < array[bestChildYet])
                    bestChildYet = candidateChild;
                k++;
                candidateChild = kthChild(hole, k);
            }
            return bestChildYet;
        }

        /*
         * Function percolateUp  
         */
        void percolateUp(int hole)
        {
            int tmp = array[hole];
            for (; hole > 0 && tmp < array[parent(hole)]; hole = parent(hole))
                array[hole] = array[ parent(hole) ];
            array[hole] = tmp;
        }

        /*
         * Function to print heap 
         */
        void printHeap()
        {
            cout<<"\nHeap = ";
            for (int i = 0; i < currentSize; i++)
                cout<
            cout<
        }
};
/*
 * Main
 */
int main()
{
    cout<<"Dary Heap Test\n\n";
    cout<<"Enter size and D of Dary Heap: ";
    int size, num, choice, val;
    cin>>size>>num;
    DaryHeap th(size, num);
    char ch;
    do
    {
        cout<<"\nDary Heap Operations\n";
        cout<<"1. Insert "<
        cout<<"2. Delete"<
        cout<<"3. Check full"<
        cout<<"4. Check empty"<
        cout<<"5. Clear"<
        bool chk;
        cout<<"Enter your Choice: ";
        cin>>choice;
        switch (choice)
        {
        case 1:
            cout<<"Enter integer element to insert: ";
            cin>>val;
            th.insert(val);
            break;
        case 2:
            cout<<"Enter delete position: ";
            cin>>val;
            th.Delete(val - 1);
            break;
        case 3:
            if (th.isFull())
                cout<<"The Heap is Full"<
            else
                cout<<"The Heap is not Full"<
            break;
        case 4 :
            if (th.isEmpty())
                cout<<"The Heap is Empty"<
            else
                cout<<"The Heap is not Empty"<
            break;
        case 5 :
            th.makeEmpty();
            cout<<"Heap Cleared\n";
            break;
        default :
            cout<<"Wrong Entry \n ";
            break;
        }
        th.printHeap();
        cout<<"\nDo you want to continue (Type y or n) \n";
        cin>>ch;
    }
    while (ch == 'Y'|| ch == 'y');
    return 0;
}


Output:

Dary Heap Test

Enter size and D of Dary Heap: 6 3

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 1
Enter integer element to insert: 24

Heap = 24

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 1
Enter integer element to insert: 6

Heap = 6   24

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 1
Enter integer element to insert: 23

Heap = 6   24   23

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 1
Enter integer element to insert: 12

Heap = 6   24   23   12

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 1
Enter integer element to insert: 75

Heap = 6   24   23   12   75

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 1
Enter integer element to insert: 78

Heap = 6   24   23   12   75   78

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 1
Enter integer element to insert: 29

Heap = 6   24   23   12   75   78   29

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 2
Enter delete position: 5

Heap = 6   24   23   12   29   78

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 2
Enter delete position: 6

Heap = 6   24   23   12   29

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 2
Enter delete position: 3

Heap = 6   24   29   12

Do you want to continue (Type y or n)
y

Dary Heap Operations
1. Insert
2. Delete
3. Check full
4. Check empty
5. Clear
Enter your Choice: 5
Heap Cleared

Heap =

Do you want to continue (Type y or n)
n

------------------
(program exited with code: 1)
Press return to continue



More C++ 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...