最近在学习最小生成树时,用到了优先队列这个结构,琢磨这自己也来写下,搞了半天终于写出来了,于是就记录下
import java.util.ArrayList;

class MyHeap<Type  extends Comparable<Type>>{

  private ArrayList<Type> 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);
          ArrayList<Type>temp=new ArrayList<Type>(MaxSize);
          for(int i=0;i<this.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<0) {
             break;
          }
          if(data.get(parentIndex).compareTo(childNode)<0) {
              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;i<this.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<<1)+1;
        while(Index+1<this.size) {
            if(data.get(Index).compareTo(data.get(Index+1))<0) {
                Index++;
            }
            if(data.get(Index).compareTo(parentNode)>0) {
                data.add(parentIndex, data.get(Index));
                data.remove(parentIndex+1);
            }
            else {
                break;
            }
            parentIndex=Index;
            Index=(parentIndex<<1)+1;
          }
       data.add(parentIndex, parentNode);
       data.remove(parentIndex+1);
       return true;
      }
      else {
          return false;
      }

    }
}

public class Main {
   public static void main(String[] args) {
    MyHeap<Integer>space=new MyHeap<Integer>();
    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();
    }
}
01-20 05:03