序文
リンクリストは、一般的な基本データ構造です。線形テーブルですが、メモリに連続して保存されていません。チェーン形式に保存されます。各ノードは、次のノードの「ポインター」を保存します。 Javaのデータは、参照データ型と基本データ型に分割されます。 Javaにはポインターの概念はありませんが、リンクリストの場合、ポインターは参照データ型のアドレスを指します。
リンクされたリストと配列はどちらも線形データ構造であり、その長さは配列に固定されています。それらはメモリに連続的であるため、検索とトラバーサルにより適しています。リンクされたリストはメモリに順番に保存されていませんが、「ポインター」で構成されているため、挿入と削除時に配列を比較する方が便利です。
次のコードは、内部クラスと再帰的方法を通じてJava言語で説明されているリンクリストの単純なデータ構造を実装します。詳細な紹介を見てみましょう。
リンクリストデータ構造の定義
まず、リンクされたリストデータ構造の定義を見てみましょう。コードは次のとおりです。
クラスNodemanager {private node root; // rootノードprivate int currentIndex = 0; //ノードシリアル番号、各操作は0から開始されますvoid add(int data){} public void delnode(int data){} public void print(){} public boolean findnode(int data){} public boolean updatenode(int olddata、int newdata){} int int index index index(int index in in in data {} inteメソッドクラスノード{private int data;次のプライベートノード。 //現在のタイプをプロパティパブリックノード(intデータ)として取得{this.data = data; } public void setData(int data){this.data = data; } public int getData(){return data; } //ノードpublic void addnode(int data){} // delete node public void delnode(int data){} //すべてのノードpublic void printnode(){} //ノードが存在するかどうかを検索します{} {} {} {} insert node public void insertnode(int index、int data){}}}リンクリストの定義では、Nodemanagerクラスを使用してリンクリスト操作を管理し、メンバー内部クラスノードはリンクリストデータとチェーン構造を提供するために使用されます。クラスユーザーの場合、データは直接アクセスされないため、NodeManagerクラスが動作し、内部クラスのノードが実際のデータ管理を提供します。したがって、ノードクラスは実際のデータ操作方法を提供する必要があり、NodeManagerクラスは、外部でリンクリストを操作するための一連のメソッドを提供する必要もあります。したがって、NodeManagerクラスとノードクラスの両方は、一見同じ方法を提供しますが、実際の意味は同じではありません。
NodeManagerクラスとノードクラスのADD()メソッドを確認しましょう。コードは次のとおりです。
public void add(int data){if(root == null){root = new node(data); } else {root.addnode(data); }} //ノードpublic void addnode(int data){if(this.next == null){this.next = new node(data); } else {this.next.addnode(data); }}コードの上記の方法はNodeManagerクラスの方法であり、次の方法はノードクラスのメソッドです。
ルートメンバー変数は、リンクリストのヘッドノードを管理するために使用されるマネージャークラスで提供されます。したがって、ノードを追加すると、まずルートが空であるかどうかが判断されます。空の場合、ノードはルートによって直接保存されます。ルートが空でない場合、ノードクラスのaddNode()メソッドを介して追加されます。ポイントに追加するという考え方は、現在のリンクリストの最後のノードを見つけて、ノードが最後のノードに割り当てられる次のメンバー変数に新しい追加を割り当てることです。
リンクされたリストを追加、削除、変更、チェックします
リンクされたリストの他の操作にも同じアイデアが与えられています。リンクリストの追加、削除、取得、および出力のための完全なコードは次のとおりです。
クラスNodemanager {private node root; // rootノードprivate int currentIndex = 0; //ノードシリアル番号、各操作は0 public void add(int data){if(root == null){root = new node(data);から始まります。 } else {root.addnode(data); }} public void delnode(int data){if(root == null)return; if(root.getData()== data){node tmp = root; root = root.next; tmp = null; } else {root.delnode(data); }} public void print(){if(root!= null){system.out.print(root.getData() + ""); root.printnode(); System.out.println(); }} public boolean findNode(int data){if(root == null)return false; if(root.getData()== data){return true; } else {return root.findnode(data); }} public boolean updatenode(int olddata、int newdata){if(root == null)return false; if(root.getData()== oldData){root.setData(newData); trueを返します。 } else {return root.updatenode(olddata、newData); }} // public void insert(int index、int data){if(index <0)return; currentIndex = 0; if(index == currentIndex){node newNode = new Node(data); newnode.next = root; root = newNode; } else {root.insertnode(index、data); }} //メソッドクラスnode {private int dataを提供するデータを所有している人。次のプライベートノード。 //現在のタイプをプロパティパブリックノード(intデータ)として取得{this.data = data; } public void setData(int data){this.data = data; } public int getData(){return data; } // node public void addnode(int data){if(this.next == null){this.next = new node(data); } else {this.next.addnode(data); }} //ノードpublic void delnode(int data){if(this.next!= null){if(this.next.getData()== data){node tmp = this.next; this.next = this.next.next; tmp = null; } else {this.next.delnode(data); }}} //すべてのノードを出力public void printnode(){if(this.next!= null){system.out.print(this.next.getData() + ""); this.next.printnode(); }} //ノードがpublic boolean findNode(int data)が存在するかどうかを検索{if(this.next!= null){if(this.next.getData()== data){return true; } else {return this.next.findnode(data); }} falseを返します。 } //ノードパブリックブールUpdateNode(int olddata、int newdata){if(this.next!= null){if(this.next.getData()== olddata){this.next.setdata(newData); trueを返します。 } else {return this.next.updatenode(olddata、newdata); }} falseを返します。 } // insert node public void insertnode(int index、int data){currentIndex ++; if(index == currentIndex){node newNode = new Node(data); newnode.next = this.next; this.next = newNode; } else {this.next.insertnode(index、data); }}}}}上記は、リンクリストの基本操作の完全なコードです。以下はテスト用のコールコードです。コードは次のとおりです。
public class linklist {public static void main(string [] args){nodemanager nm = new nodemanager(); system.out.println( "リンクリストのアドレス(5、4、3、2、1を追加)"); nm.add(5); nm.add(4); nm.add(3); nm.add(2); nm.add(1); nm.print(); system.out.println( "linked listed(delete 3)"); nm.delnode(3); nm.print(); system.out.println( "リンクリストの見た目(Finding 1)"); system.out.println(nm.findnode(1)); system.out.println( "リンクリスト(10)" "); System.out.println(nm.findnode(10)); System.out.println( "更新リスト(更新1〜10)"); nm.updatenode(1、10); nm.print(); system.out.println( "リスト挿入(最初の位置に20を挿入)"); nm.insert(1、20); nm.print(); system.out.println( "リスト挿入(最初の位置に30を挿入)"); nm.insert(1、20); nm.print(); system.out.println( "挿入リスト(ゼロ位置に30を挿入)"); nm.insert(0、30); nm.print(); }}コードをコンパイルして実行すると、結果は次のとおりです。
Javaのコレクションクラスのデータ構造に関する多くの知識を使用しました。私が良好な状態にあるとき、私はJavaコレクションクラスのソースコードを学びます。私はジュニアプログラマーになるために一生懸命働きます!
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。