diff --git a/Heap.c b/Heap.c new file mode 100644 index 0000000..3686a84 --- /dev/null +++ b/Heap.c @@ -0,0 +1,90 @@ +/ Max-Heap data structure in C + +#include +int size = 0; +void swap(int *a, int *b) +{ + int temp = *b; + *b = *a; + *a = temp; +} +void heapify(int array[], int size, int i) +{ + if (size == 1) + { + printf("Single element in the heap"); + } + else + { + int largest = i; + int l = 2 * i + 1; + int r = 2 * i + 2; + if (l < size && array[l] > array[largest]) + largest = l; + if (r < size && array[r] > array[largest]) + largest = r; + if (largest != i) + { + swap(&array[i], &array[largest]); + heapify(array, size, largest); + } + } +} +void insert(int array[], int newNum) +{ + if (size == 0) + { + array[0] = newNum; + size += 1; + } + else + { + array[size] = newNum; + size += 1; + for (int i = size / 2 - 1; i >= 0; i--) + { + heapify(array, size, i); + } + } +} +void deleteRoot(int array[], int num) +{ + int i; + for (i = 0; i < size; i++) + { + if (num == array[i]) + break; + } + + swap(&array[i], &array[size - 1]); + size -= 1; + for (int i = size / 2 - 1; i >= 0; i--) + { + heapify(array, size, i); + } +} +void printArray(int array[], int size) +{ + for (int i = 0; i < size; ++i) + printf("%d ", array[i]); + printf("\n"); +} +int main() +{ + int array[10]; + + insert(array, 3); + insert(array, 4); + insert(array, 9); + insert(array, 5); + insert(array, 2); + + printf("Max-Heap array: "); + printArray(array, size); + + deleteRoot(array, 4); + + printf("After deleting an element: "); + + printArray(array, size); +}