Computer Science Of Engineering

Simple and practical computer science tutorials, programming guides, and engineering concepts for students and beginners.

Breaking

Saturday, May 3, 2025

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:


No comments:

Post a Comment