二叉堆的简单操作

int heap[size];int top;


void up(int p)
{
	while(p>1)
	{
		if(heap[p]>heap[p/2])
		{
			swap(heap[p],heap[p/2]);
			p/=2;
		}
		else break;
	}
}


void insert(int val)
{
	heap[++n]=val;
	up(n);
}


int GetTop()
{
	return heap[1];
}


void down(int p)
{
	int s=p*2;
	while(s<=n)
	{
		if(s<=n&&heap[s]heap[p])
		{
			swap(heap[s],heap[p]);
			p=s,s=p*2;
		}
		else break;
	}
}


void Extract()
{
	heap[1]=heap[top]--;
	down(1);
}


void Remove(int k)
{
	heap[k]=heap[n--];
	up(k),down(k);
}

 

你可能感兴趣的:(数据结构)