プライオリティキューのJavaの単純な実装

最近の研究では、最小スパニングツリー、彼は書き留めてある疑問に、この構造のプライオリティキューを使用し、だから今ようやく書かれたので、彼が記録
輸入はjava.util.ArrayList; 

クラス MyHeap <タイプ   延び同等<タイプ>> { 
    
  プライベートのArrayList <タイプ> データ。
  プライベート int型のMaxSize。
  プライベート int型のサイズ。
  
  パブリックMyHeap(){
       この .MaxSize = 0 この .size = 0 ; 
  } 
  
  パブリック ブール追加(タイプElemの){
       場合この .size> = この.MaxSize){ 
          のMaxSize =のMaxSize +((MaxSizeの>> 1)> 1(MaxSizeの>> 1):1 )。
          配列リスト<タイプ> TEMP = 新規のArrayList <タイプ> (のMaxSize)。
          以下のためにint型 i = 0; I <  .size; ++ I){ 
              temp.add(I、data.get(I))。
          } 
          データ = TEMP。
      } 
      data.add(Elemの)。
      int型 childIndexに= この.size。
      タイプchildNodeが = data.get(サイズ)。
      一方、(childIndexに> = 0 ){
           int型 parentIndex =(childIndexに-1)>> 1 もし(parentIndex <0 ){
              破ります
          }
          もし(data.get(parentIndex).compareTo(childNodeが)<0 ){ 
              data.remove(childIndexに)。
              data.add(childIndexに、data.get(parentIndex))。
          } {
               破ります
          } 
          childIndexに = parentIndex。
      } 
      data.remove(childIndexに)。
      data.add(childIndexに、childNodeが)。
      この .size + = 1 ;
      返す ; 
  } 
  パブリック ブールshowHeap(){
       ためint型 i = 0; I <  .size; ++I){ 
          System.out.print(data.get(I) +」 " )。
      } 
      を返す 
  } 

  パブリック ブール{()を削除
       する場合この .size> = 1 ){
         この .size- = 1 
        data.add( 1、data.get(この.size))。
        data.remove( 0 )。
        int型 parentIndex = 0 ; 
        入力のparentNode = data.get(parentIndex)。
        int型のインデックス=(parentIndex << 1)+1 ;
        しばらく(インデックス+ 1 < この.size){
             場合(data.get(インデックス).compareTo(data.get(インデックス+ 1))<0 ){ 
                インデックス ++ 
            } 
            であれば(data.get(インデックス).compareTo(のparentNode)> 0 ){ 
                data.add(parentIndex、data.get(インデックス))。
                data.remove(parentIndex +1 )。
            } 
            {
                 破ります
            } 
            parentIndex = ランキング; 
            インデックス =(parentIndex << 1)+1 
          } 
       data.add(parentIndex、のparentNode)。 
       data.remove(parentIndex +1 )。
       返す ; 
      }     
      {
           戻り 
      } 
      
    } 
} 

パブリック クラスメイン{
    公共 静的 ボイドメイン(文字列[]引数){ 
    MyHeap <整数>スペース= 新しい MyHeap <整数> (); 
    space.add( 12 )。
    space.add( 4 )。
    space.add( 17 )。
    space.add( 56 )。
    space.add( 20 
    space.add()。
    space.add( 30 )。546 ); 
    space.add( 53 )。
    space.delete(); 
    space.showHeap(); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/z2529827226/p/11620666.html