bool Priority_Queue::insert(int32_t key) { _heap_size += 1; _max_heap.push_back(INT_MIN); increase_key(_heap_size - 1, key); return true; }
static void increase_key(size_t n, int *heap, size_t index) { size_t parent_index; if (index == 0) return; parent_index = parent(index); if (heap[index] > heap[parent_index]) { swap(heap, index, parent_index); increase_key(n, heap, parent_index); } }
int main() { int n,i,value=0; //number of nodes scanf("%d",&n); int a[n]; for(i=1;i<=n;i++){ scanf("%d",&a[i]); } char str[20]; scanf("%s",str); while(strcmp(str,"exit")!=0){ if(strcmp(str,"parent")==0){ scanf("%d",&i); value=parent(n,a,i); if(value!=-1) printf("%d",a[value]); } else if(strcmp(str,"left")==0){ scanf("%d",&i); value=left(n,a,i); if(value!=-1) printf("%d",a[value]); } else if(strcmp(str,"right")==0){ scanf("%d",&i); value=right(n,a,i); if(value!=-1) printf("%d",a[value]); } else if(strcmp(str,"minimum")==0){ value=minimum(n,a); printf("%d",value); } else if(strcmp(str,"minimum")==0){ value=maximum(n,a); printf("%d",value); } else if(strcmp(str,"leaf_nodes")==0){ leaf_nodes(n,a); } else if(strcmp(str,"buildheap_max")==0){ buildheap_max(n,a); for(i=1;i<=n;i++){ printf("%d ",a[i]); } } else if(strcmp(str,"heapsort")==0){ heapsort(n,a); } else if(strcmp(str,"extract_max")==0){ value=extract_max(n,a); printf("%d",value); } else if(strcmp(str,"extract_min")==0){ value=extract_min(n,a); printf("%d",value); } else if(strcmp(str,"increase_key")==0){ scanf("%d%d",&i,&value); increase_key(n,a,i,value); } else if(strcmp(str,"decrease_key")==0){ scanf("%d%d",&i,&value); decrease_key(n,a,i,value); } else if(strcmp(str,"buildheap_min")==0){ buildheap_min(n,a); for(i=1;i<=n;i++){ printf("%d ",a[i]); } } scanf("%s",str); } return 0; }
void push_heap(size_t n, int *heap) { increase_key(n, heap, n - 1); }