Java优先队列的简单实现
标签:false nod list extend sys rgs compare get type
最近在学习最小生成树时,用到了优先队列这个结构,琢磨这自己也来写下,搞了半天终于写出来了,于是就记录下
import java.util.ArrayList;
class MyHeapextends Comparable>{
private ArrayList data;
private int MaxSize;
private int size;
public MyHeap() {
this.MaxSize=0;
this.size=0;
}
public boolean add(Type Elem) {
if(this.size>=this.MaxSize) {
MaxSize=MaxSize+((MaxSize>>1)>1?(MaxSize>>1):1);
ArrayListtemp=new ArrayList(MaxSize);
for(int i=0;ithis.size;++i) {
temp.add(i, data.get(i));
}
data=temp;
}
data.add(Elem);
int childIndex=this.size;
Type childNode=data.get(size);
while(childIndex>=0) {
int parentIndex=(childIndex-1)>>1;
if(parentIndex) {
break;
}
if(data.get(parentIndex).compareTo(childNode)) {
data.remove(childIndex);
data.add(childIndex, data.get(parentIndex));
}else {
break;
}
childIndex=parentIndex;
}
data.remove(childIndex);
data.add(childIndex, childNode);
this.size+=1;
return true;
}
public boolean showHeap() {
for(int i=0;ithis.size;++i) {
System.out.print(data.get(i)+" ");
}
return true;
}
public boolean delete(){
if(this.size>=1){
this.size-=1;
data.add(1, data.get(this.size));
data.remove(0);
int parentIndex=0;
Type parentNode=data.get(parentIndex);
int Index=(parentIndex;
while(Index+1this.size) {
if(data.get(Index).compareTo(data.get(Index+1))) {
Index++;
}
if(data.get(Index).compareTo(parentNode)>0) {
data.add(parentIndex, data.get(Index));
data.remove(parentIndex+1);
}
else {
break;
}
parentIndex=Index;
Index=(parentIndex;
}
data.add(parentIndex, parentNode);
data.remove(parentIndex+1);
return true;
}
else {
return false;
}
}
}
public class Main {
public static void main(String[] args) {
MyHeapspace=new MyHeap();
space.add(12);
space.add(4);
space.add(17);
space.add(56);
space.add(20);
space.add(30);
space.add(546);
space.add(53);
space.delete();
space.showHeap();
}
}
Java优先队列的简单实现
标签:false nod list extend sys rgs compare get type
原文地址:https://www.cnblogs.com/z2529827226/p/11620666.html
评论