#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;
}
Comments
Post a Comment