bool Priority_Queue::insert(int32_t key)
{
    _heap_size += 1;
    _max_heap.push_back(INT_MIN);
    increase_key(_heap_size - 1, key);
    return true;
}
Example #2
0
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);
  }
}
Example #3
0
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;
}
Example #4
0
void push_heap(size_t n, int *heap) {
  increase_key(n, heap, n - 1);
}