Implement a simple Heap C Programming.

2 years ago
C Programming

#include <stdio.h> int array[100], n; void main()

{

int choice, num;

n = 0;/*Represents number of nodes in the heap*/ while(1)

{

printf("1.Insert the element \n"); printf("2.Delete the element \n"); printf("3.Display all elements \n");

printf("4.Quit \n"); printf("Enter your choice : "); scanf("%d", &choice); switch(choice)

{

case 1:

printf("Enter the element to be inserted to the list : "); scanf("%d", &num);

insert(num, n); n = n + 1; break;

 

 

 

 

 

case 2:

printf("Enter the elements to be deleted from the list: "); scanf("%d", &num);

delete(num); break;

case 3:

display(); break;

case 4:

exit(0); default:

printf("Invalid choice \n");

}/*End of switch */

}/*End of while */

 

}/*End of main()*/

 

 

display()

{

int i;

if (n == 0)

{

printf("Heap is empty \n"); return;

}

for (i = 0; i < n; i++) printf("%d ", array[i]);

 

 

 

 

 

printf("\n");

}/*End of display()*/

 

 

insert(int num, int location)

{

int parentnode; while (location > 0)

{

parentnode =(location - 1)/2; if (num <= array[parentnode])

{

array[location] = num; return;

}

array[location] = array[parentnode]; location = parentnode;

}/*End of while*/

array[0] = num; /*assign number to the root node */

}/*End of insert()*/

 

 

delete(int num)

{

int left, right, i, temp, parentnode;

 

 

for (i = 0; i < num; i++) { if (num == array[i])

 

 

 

 

 

break;

}

if (num != array[i])

{

printf("%d not found in heap list\n", num); return;

}

array[i] = array[n - 1]; n = n - 1;

parentnode =(i - 1) / 2; /*find parentnode of node i */ if (array[i] > array[parentnode])

{

insert(array[i], i); return;

}

left = 2 * i + 1; /*left child of i*/ right = 2 * i + 2; /* right child of i*/ while (right < n)

{

if (array[i] >= array[left] && array[i] >= array[right]) return;

if (array[right] <= array[left])

{

temp = array[i]; array[i] = array[left]; array[left] = temp;

 

 

 

 

 

i = left;

}

else

{

temp = array[i]; array[i] = array[right]; array[right] = temp;

i = right;

}

left = 2 * i + 1; right = 2 * i + 2;

}/*End of while*/

if (left == n - 1 && array[i])     { temp = array[i];

array[i] = array[left]; array[left] = temp;

}

}

More related questions

Questions Bank

View all Questions