代码如下
public class Heap {
int data[];
int weight[];
int flag[];
int length;
Heap(int max)
{
this.data=new int[max];
this.weight=new int[max];
this.flag=new int[max];
this.length=0;
}
Heap()
{
this(100);
}
public boolean isEmpty()
{
return this.length==0?true:false;
}
public void exchange_f(int index)
{
if(index==0) return;
int tmp=this.data[index];
this.data[index]=this.data[index/2];
this.data[index/2]=tmp;
tmp=this.weight[index];
this.weight[index]=this.weight[index/2];
this.weight[index/2]=tmp;
tmp=this.flag[index];
this.flag[index]=this.flag[index/2];
this.flag[index/2]=tmp;
}
public void exchange_lc(int index)
{
if(index*2+1<this.length)
this.exchange_f(index*2+1);
}
public void exchange_rc(int index)
{
if(index*2+2<this.length)
this.exchange_f(index*2+2);
}
public void add(int data,int weight)
{
this.add(data, weight,0);
}
public void add(int data,int weight,int flag)
{
this.length++;
this.data[length]=data;
this.weight[length]=weight;
this.flag[length]=flag;
int index=length;
while(index!=0)
{
if(this.weight[index]<this.weight[index/2])
{
exchange_f(index);
index/=2;
}
else break;
}
}
public void delete()
{
this.data[0]=this.data[length];
this.weight[0]=this.weight[length];
this.length--;
int index=0,right,left;
while(index*2+1<this.length)
{
left=index*2+1;
right=index*2+2;
if(right>=this.length)
{
if(this.weight[index]>this.weight[left])
this.exchange_lc(index);
break;
}
if(this.weight[index]<this.weight[left] && this.weight[index]<this.weight[right])
break;
else
{
if(this.weight[left]<this.weight[right])
{
this.exchange_lc(index);
index=index*2+1;
}
else
{
this.exchange_rc(index);
index=index*2+2;
}
}
}
}
public int getIndex(int data)
{
for(int i=0;i<length;i++)
{
if(this.data[i]==data) return i;
}
return 0;
}
}