fbpx

Struktur Data : Implementasi Heap dalam Bahasa C

Untuk mengimplementasikan Heap dalam bahasa C kita dapat menggunakan array untuk menyimpan node-node dari heap.

(

Masukan node โ€“ node di heap dengan urutan dari level paling atas turun ke level di bawahnya dengan anak kiri โ€“ anak kanan

Index root selalu 1 dan elemen di index i dalam array Arr berarti:

  • Parent-nya ada di index i/2 (kecuali root karena tidak punya parent) dan dapat diakses di Arr[i/2]
  • Anak kirinya ada di index 2i dan dapat diakses di Arr[2i]
  • Anak kanannya ada di index 2i+1 dan dapat diakses di Arr[2i+1]

Source Code

#include <stdio.h>

#define MAX 10

/*Returns parent index*/
int parent(int i){
	return i/2;
}

/*Returns left child index*/
int left(int i){
	return 2*i;
}

/*Returns right child index*/
int right(int i){
	return 2*i+1;
}

/*This function is used to swap two elements*/
void swap(int *p, int *q){
	int temp;
	temp=*p;
	*p=*q;
	*q=temp;
}

void insert(int a[],int heapsize,int data){
	int i,p;
	if(heapsize==MAX){
		printf("Queue Is Full!!n");
		return;
	}
	i=1+heapsize;
	a[i]=data;
	p=parent(i);
	while(i>1 && a[p]<a[i]){
		swap(&a[p],&a[i]);
		i=p;
		p=parent(i);
	}
}

/*This function deletes an element from the queue*/
int delete(int a[],int heapsize){
	int data,i,l,r,max_child,t;
	if(heapsize==0)	{
		printf("Queue Is Empty!!\n");
		return 0;
	}
	t=a[1];
	swap(&a[1],&a[heapsize]);
	i=1;
	heapsize--;
    while(1){
		if((l=left(i))>=heapsize) //leaf
            break;

		if((r=right(i))>=heapsize) //leaf
            max_child=l;
		else
            max_child=(a[l]>a[r])?l:r; //which one is larger, left or right

		if(a[i]>=a[max_child])
            break;

		swap(&a[i],&a[max_child]);
		i=max_child;
	}
	return t;
}

/*This function displays the queue*/
void display(int a[],int n){
	int i;
	if(n==0){
		printf("Queue Is Empty!!\n");
		return;
	}
	for(i=1;i<=n;i++) printf("%d ",a[i]);
	printf("\n");
}

void main(){
	int choice,num,n,a[MAX],data,s;
	n=0;/*Represents number of nodes in the queue*/
	while(1){
		printf(".....MAIN MENU.....\n");
		printf("\n1.Insert.\n");
		printf("2.Delete.\n");
		printf("3.Display.\n");
		printf("4.Quit.\n");
		printf("\nEnter your choice : ");
		scanf("%d",&choice);

        switch(choice){
			case 1:/*choice to accept an element and insert it in the queue*/
				printf("Enter data to be inserted : ");
				scanf("%d",&data);
				insert(a,n,data);
				n++;
				break;
			case 2:
				s=delete(a,n);
				if(s!=0) printf("\nThe deleted value is : %d \n",s);
				if(n>0) n--;
				break;
            case 3: //display
				printf("\n");
				display(a,n);
				break;
			case 4: return;
			default: printf("Invalid choice.\n");
		}
		printf("\n\n");
	}
}

Materi Lengkap

Silakan baca juga beberapa artikel menarik kami tentang Heap dan Hash, daftar lengkapnya adalah sebagai berikut.


Tonton juga video pilihan dari kami berikut ini

Bagikan ke teman-teman Anda

Contact Us

How to whitelist website on AdBlocker?

How to whitelist website on AdBlocker?

  1. 1 Click on the AdBlock Plus icon on the top right corner of your browser
  2. 2 Click on "Enabled on this site" from the AdBlock Plus option
  3. 3 Refresh the page and start browsing the site
error: Content is protected !!
Up