Construct Min and Max Heap using arrays, delete any element and display the content of the Heap.

 #include <stdio.h>

#include <stdlib.h>


#define MAX_SIZE 100


int minHeap[MAX_SIZE], maxHeap[MAX_SIZE];

int minSize = 0, maxSize = 0;


// ---------------- Min Heap Functions ----------------


void minHeapifyDown(int i) {

    int smallest = i;

    int l = 2*i + 1;

    int r = 2*i + 2;


    if (l < minSize && minHeap[l] < minHeap[smallest]) smallest = l;

    if (r < minSize && minHeap[r] < minHeap[smallest]) smallest = r;


    if (smallest != i) {

        int temp = minHeap[i];

        minHeap[i] = minHeap[smallest];

        minHeap[smallest] = temp;

        minHeapifyDown(smallest);

    }

}


void minHeapifyUp(int i) {

    if (i == 0) return;

    int parent = (i - 1) / 2;

    if (minHeap[parent] > minHeap[i]) {

        int temp = minHeap[i];

        minHeap[i] = minHeap[parent];

        minHeap[parent] = temp;

        minHeapifyUp(parent);

    }

}


void insertMinHeap(int value) {

    if (minSize >= MAX_SIZE) {

        printf("Min Heap full\n");

        return;

    }

    minHeap[minSize] = value;

    minHeapifyUp(minSize);

    minSize++;

}


void deleteFromMinHeap(int value) {

    int i;

    for (i = 0; i < minSize; i++) {

        if (minHeap[i] == value) break;

    }

    if (i == minSize) {

        printf("Value %d not found in Min Heap\n", value);

        return;

    }


    minHeap[i] = minHeap[--minSize];

    minHeapifyDown(i);

}


// ---------------- Max Heap Functions ----------------


void maxHeapifyDown(int i) {

    int largest = i;

    int l = 2*i + 1;

    int r = 2*i + 2;


    if (l < maxSize && maxHeap[l] > maxHeap[largest]) largest = l;

    if (r < maxSize && maxHeap[r] > maxHeap[largest]) largest = r;


    if (largest != i) {

        int temp = maxHeap[i];

        maxHeap[i] = maxHeap[largest];

        maxHeap[largest] = temp;

        maxHeapifyDown(largest);

    }

}


void maxHeapifyUp(int i) {

    if (i == 0) return;

    int parent = (i - 1) / 2;

    if (maxHeap[parent] < maxHeap[i]) {

        int temp = maxHeap[i];

        maxHeap[i] = maxHeap[parent];

        maxHeap[parent] = temp;

        maxHeapifyUp(parent);

    }

}


void insertMaxHeap(int value) {

    if (maxSize >= MAX_SIZE) {

        printf("Max Heap full\n");

        return;

    }

    maxHeap[maxSize] = value;

    maxHeapifyUp(maxSize);

    maxSize++;

}


void deleteFromMaxHeap(int value) {

    int i;

    for (i = 0; i < maxSize; i++) {

        if (maxHeap[i] == value) break;

    }

    if (i == maxSize) {

        printf("Value %d not found in Max Heap\n", value);

        return;

    }


    maxHeap[i] = maxHeap[--maxSize];

    maxHeapifyDown(i);

}


// ---------------- Display Functions ----------------


void displayHeap(int heap[], int size, char* name) {

    printf("%s: ", name);

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

        printf("%d ", heap[i]);

    printf("\n");

}


// ---------------- Main Function ----------------


int main() {

    int values[] = {40, 30, 20, 50, 10, 70, 60};

    int n = sizeof(values) / sizeof(values[0]);


    for (int i = 0; i < n; i++) {

        insertMinHeap(values[i]);

        insertMaxHeap(values[i]);

    }


    printf("Initial Heaps:\n");

    displayHeap(minHeap, minSize, "Min Heap");

    displayHeap(maxHeap, maxSize, "Max Heap");


    int toDelete = 30;

    printf("\nDeleting %d from both heaps...\n", toDelete);

    deleteFromMinHeap(toDelete);

    deleteFromMaxHeap(toDelete);


    printf("\nAfter Deletion:\n");

    displayHeap(minHeap, minSize, "Min Heap");

    displayHeap(maxHeap, maxSize, "Max Heap");


    return 0;

}

Output:


Comments