Beispiel #1
0
void heap_insert(struct heap_t * __heap, int value){

	

	/*struct heap_t * HEAP;

	HEAP->array = (struct node*)malloc(sizeof(struct node)*(size+1));

	memcpy(HEAP->array,__heap->array,sizeof(struct node)*size); 

	HEAP->array[size+1].data = value;

	heapify(HEAP,size+1);

	free(__heap);*/

	//return HEAP;

	struct node * NODE = malloc(sizeof(struct node));

	NODE->data = value;

    memcpy(__heap->array+(size+1),NODE,sizeof(struct node));

	//NODE->data = value;

	size++;

	maxheap(__heap);

}
void makeheap(char a[100][100],int n)
{
	int j;
	heapsize = n;
	for (j = floor(n/2); j >= 1; j--)
	{
		maxheap(a,j);
	}
}
void heapsort(char a[100][100],int n)
{
	int i;
	char temp[100];
	makeheap(a,n);

	for (i = n; i >= 2; i--)
	{
		strcpy(temp,a[1]);
		strcpy(a[1],a[i]);
		strcpy(a[i],temp);
		heapsize--;
		maxheap(a,1);
	}
}
void maxheap(char a[100][100],int i)
{
	int largest;
	char temp[100];
	int l = left(i);
	int r = right(i);
	if(l <= heapsize && (strcmp(a[l] ,a[i])  > 0))
		largest = l;
	else
		largest = i;
	if(r <= heapsize && (strcmp(a[r] ,a[largest])  > 0))
		largest = r;
	if(largest != i)
	{
		strcpy(temp,a[largest]);
		strcpy(a[largest],a[i]);
		strcpy(a[i],temp);
		maxheap(a,largest);
	}
}
Beispiel #5
0
int main()

{

//	int j;

	int func;

	int value;

	char cmd[1024];

	printf("Please input the heap size : ");

	scanf("%d",&size);

	printf("\n");

	heap = build_heap(size);

	maxheap(heap);

	do{	

	    printf("1) Insert 2) Delete 3) Extract max 4) Top Value 5) Print Heap 6)Free:");

		for(func = 0; func<=0 || func > 7; sscanf(cmd,"%d",&func)){

		  scanf("%s",cmd);

		  printf("\n");

	      }

	    switch(func){

	    	

	      case 1:

	      	printf("please input new value for insert:");

		    scanf("%d ",&value);	

		    printf("\n");

	        heap_insert(heap,value);			     

		  break;	

	      

	      case 2:

		  printf("please input heap-index to delete:");

		    scanf("%d ",&value);	

		    printf("\n");	

	       heap_delete(value);

		  break;

		  

		  case 3:	

	       heap_extract();

		  break;

		  

		  case 4:	

	        heap_top(heap);

		  break;

		  

		  case 5:

		  	heap_print();

		  break;

		  

		  case 6:

		  	free(heap->array);

		  	//free(heap);

		  	size = 0;

		  	break;

		  

	    }  

	      

	}while(1);

	

	

	

	

	return 0;

}