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); } }
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; }