図3に示すように、円形のリスト(Java実装)

図1に示すように、ノードクラス

パブリック クラスノード<T> {
     パブリックTデータ、
    公共ノードの次。
}

2、実装クラス

パブリック クラス CircularLink <T> { 

    プライベート 静的ノードヘッド= NULL ; 

    / ** 
     *初期化
     * / 
    公共 ボイドinitCircularLink(){ 
        ヘッド = 新しい新しいノード(); 
        head.data = NULL ; 
        head.next = ヘッド; 
    } 

    / ** 
     *挿入ノード
     * 
     * @paramの要素:ノード要素値
      * / 
    公共 ボイドinsertCircularLink(T元素){ 
        ノードnode = 新しい新しいノード()。// 初期化するノード 
        node.data = 要素;
         IF(head.next == ヘッド){ 
            head.next = ノードと
            node.next = ヘッド; 
        } そうでなければ{ 
            ノードTEMP = ヘッドと、
             一方(= Temp.nextの!ヘッド){ 
                TEMP = temp.next; 
            } 
            temp.next = ノードと
            node.next = ヘッド; 

        } 
    } 

    / ** 
     *値を削除
     * 
     *@param 要素は次の値を削除する
     * @return :削除は、そうでない場合はfalse真である
      * / 
    パブリック ブールdeleteCircularLink(Tエレメント){ 

        ノードTEMP = ヘッドと、
         IF(temp.next == ヘッド){ 
            System.out.printlnは( "リストが空である、全く削除可能な値が存在しない" );
             戻り falseに; 
        } 
        ながら(= temp.next!ヘッド){
             IF(temp.next.data == 要素){ 
                temp.next = temp.next.next;
                 リターン trueに
            }他の{ 
                TEMP = temp.next; 
            } 
        } 
        リターン falseに; 
    } 

    / ** 
     *削除添字
     * 
     * @param I:上付き文字値を削除する
     * @return :真または偽の削除
      * / 
    パブリック ブール deleteIndexCircularLink(int型I){ 


        ノードTEMP = ヘッド;
         int型のインデックス= -1 ;
         IF(temp.next == ヘッド){ 
            するSystem.out.println( "リストが空である、無削除可能値");
             
     *指数設定値シーク返す ; 
        } 
        場合(I <0 || I> = sizeCircularLink()){ 
            するSystem.out.println( "越界下标" )。
            返す ; 
        } 
        一方(temp.next =!ヘッド){ 
            インデックス ++ もし(インデックス== I){ 
                temp.next = temp.next.next。
            } 
            TEMP = temp.next。
        } 
        を返す 

    } 

    / ** 
     * 
     * @Param 要素:探し要素
      * / 
    公共 ボイドfindCircularLink(Tエレメント){ 
        ノードTEMP = ヘッド;
         int型のインデックス= -1 ;
         IF(temp.next == ヘッド){ 
            するSystem.out.println(「リストがされています空気、見つけることができません" ); 

        } 
        ながら(= temp.next!ヘッド){ 
            TEMP = temp.next; 
            インデックス ++ ;
             IF(temp.data == 要素){ 
                TEMP = temp.next。 
                のSystem.out.printlnは( "添え字です「 +インデックス);
                 を返す; 
            } 
        } 
        のSystem.out.println( "あなたがここにない値を探している" ); 
    } 

    / ** 
     *インデックスの評価
     * @paramのインデックス
      * / 
    パブリック 無効 findDataCircularLink(int型インデックス){ 
        ノードTEMP = ヘッド;
         int型のサイズ= 0;            //を用いてインデックスを増加
        IF(temp.next == ヘッド){ 
            するSystem.out.printlnは( "リストが空である、全く削除可能値が存在しません" )。
             返します
        }
         IF(インデックス> = sizeCircularLink()||インデックス<0 ){ 
            System.out.printlnは( "あなたの添字範囲外" );
             リターン; 
        } 

        ながら(temp.next =!ヘッド){ 
            TEMP = temp.next; 

            IF(サイズ== インデックス){ 
                System.out.printlnは( "あなたが値を探している:" + temp.data);
                 を返す; 
            } 
            サイズ ++ ; 
        } 
        System.out.printlnは( "あなたは価値がありません" )。
    } 

    / ** 
     *印刷
     * / 
    パブリック printCircularLink(){ 
        ノードTEMP = ヘッド; 
        System.out.printの( "循環リストを印刷:" );
         しばらく(= temp.next!ヘッド){ 
            TEMP = temp.next; 
            System.out.print(temp.dataの + " " ); 

        } 
        のSystem.out.println(); 
    } 


    / ** 
     *シーク長さ
     * 
     * @return :返す長さ
      * / 
    パブリック 静的 INT sizeCircularLink(){ 
        ノードTEMP = ヘッド;
         int型のサイズ= 0;
        一方、(temp.next =!ヘッド){ 
            TEMP = temp.next。
            サイズ ++ ; 
        } 
        戻りサイズ; 
    } 

    パブリック 静的 ボイドメイン(文字列[]引数){ 
        CircularLink <整数> circularLink = 新しいCircularLink()。
        circularLink.initCircularLink(); 
        circularLink.insertCircularLink( 1 )。
        circularLink.insertCircularLink( 2 )。
        circularLink.insertCircularLink( 3 )。 
        circularLink.insertCircularLink( 4 )。
        circularLink.insertCircularLink( 5 )。

        circularLink.printCircularLink(); 
        System.out.println( "长度:" + circularLink.sizeCircularLink()); 
        System.out.println(); 

        System.out.println( "值删除值" ); 
        circularLink.deleteCircularLink( 1 )。
        circularLink.printCircularLink(); 
        System.out.println( "长度:" + circularLink.sizeCircularLink()); 
        System.out.println(); 

        System.out.println( "下标删除值" ); 
        circularLink.deleteIndexCircularLink()。1
        circularLink.printCircularLink(); 
        System.out.println( "长度:" + circularLink.sizeCircularLink()); 
        System.out.println(); 

        System.out.println( "值查找下标" ); 
        circularLink.findCircularLink( 5 )。
        circularLink.printCircularLink(); 
        System.out.println( "长度:" + circularLink.sizeCircularLink()); 
        System.out.println(); 

        System.out.println( "下标查找值" ); 
        circularLink.findDataCircularLink( 3 )。
        circularLink.printCircularLink(); 
        System.out.println( "长度:" circularLink.sizeCircularLink()); 
        System.out.println(); 

    } 
}

3、試験結果

印刷循環リスト:1 2 3 4 5  
長さ: 5 

値の値を削除します
:印刷サイクルリスト 2345  
の長さ: 4 

マーク削除価値
印刷サイクルのリスト: 245  
長さ: 3 

値のルックアップインデックス
添字: 2 
を印刷します循環リスト: 245  
長さ: 3 

の標準的なルックアップ値
あなたの境界インデックス
プリント循環リスト: 245  
長さ: 3

 

おすすめ

転載: www.cnblogs.com/karrya/p/11030211.html