머리말
링크 된 목록은 일반적인 기본 데이터 구조입니다. 선형 테이블이지만 메모리에 순차적으로 저장되지는 않습니다. 체인 형태로 저장됩니다. 각 노드는 다음 노드의 "포인터"를 저장합니다. Java의 데이터는 참조 데이터 유형 및 기본 데이터 유형으로 나뉩니다. Java에는 포인터의 개념이 없지만 링크 된 목록의 경우 포인터는 참조 데이터 유형의 주소를 나타냅니다.
링크 된 목록과 배열은 모두 선형 데이터 구조이며 길이는 배열에 대해 고정됩니다. 메모리가 연속적이기 때문에 검색 및 횡단에 더 적합합니다. 링크 된 목록은 메모리에 순차적으로 저장되지 않지만 "포인터"로 구성되기 때문에 삽입 및 삭제할 때 배열을 비교하는 것이 더 편리합니다.
다음 코드는 내부 클래스 및 재귀 방법을 통해 Java 언어로 설명 된 링크 된 목록의 간단한 데이터 구조를 구현합니다. 자세한 소개를 살펴 보겠습니다.
연결된 목록 데이터 구조의 정의
먼저 연결된 목록 데이터 구조의 정의를 살펴 보겠습니다. 코드는 다음과 같습니다.
클래스 NODEMANAGER {개인 노드 루트; // 루트 노드 개인 int currentIndex = 0; // 노드 일련 번호, 각 조작은 0 Public void add (int data) {} public void delnode (int data) {} public void print () {} public boolean ind 클래스 노드 {private int data; 개인 노드 다음; // 현재 유형을 속성 공개 노드 (int data) {this.data = data; } public void setData (int data) {this.data = data; } public int getData () {반환 데이터; } // 노드 추가 공개 void addnode (int data) {} // 노드 삭제 public void delnode (int data) {} // 모든 노드를 출력 public void printnode () {} // 노드가 공개 부울 FindNode (int data) {} // int Olde boolean updatenode (int data, int newdata, int) 노드 public void insertNode (int index, int data) {}}}링크 된 목록의 정의의 경우 NoDemanager 클래스는 링크 된 목록 작업을 관리하는 데 사용되며 멤버 내부 클래스 노드는 링크 된 목록 데이터 및 체인 구조를 제공하는 데 사용됩니다. 클래스 사용자의 경우 데이터에 직접 액세스되지 않으므로 NoDemanager 클래스가 작동하며 내부 클래스 노드는 실제 데이터 관리를 제공합니다. 따라서 노드 클래스는 실제 데이터 작동 방법을 제공해야하며 NoDemanager 클래스는 외부별로 링크 된 목록을 작동 할 수있는 일련의 메소드 세트를 제공해야합니다. 따라서 NODEMANAGER 클래스와 노드 클래스는 모두 동일한 방법을 제공하지만 실제 의미는 동일하지 않습니다.
NoDemanager 클래스 및 노드 클래스에서 add () 메소드를 확인해 봅시다. 코드는 다음과 같습니다.
public void add (int data) {if (root == null) {root = 새 노드 (data); } else {root.addnode (데이터); }} // 노드 추가 public void addnode (int data) {if (this.next == null) {this.next = new Node (data); } else {this.next.addnode (데이터); }}코드의 위의 메소드는 NoDemanager 클래스의 메소드 인 반면 다음 방법은 노드 클래스의 메소드입니다.
루트 멤버 변수는 관리자 클래스에 제공되며 링크 된 목록의 헤드 노드를 관리하는 데 사용됩니다. 따라서 노드를 추가하면 먼저 루트가 비어 있는지 결정합니다. 비어 있으면 노드는 루트에 의해 직접 저장됩니다. 루트가 비어 있지 않으면 노드 클래스의 addnode () 메소드를 통해 추가됩니다. 포인트에 추가한다는 아이디어는 현재 링크 된 목록의 마지막 노드를 찾고 노드가 마지막 노드에 할당 된 다음 멤버 변수에 새로 추가 된 것을 할당하는 것입니다.
링크 된 목록을 추가, 삭제, 수정 및 확인하십시오
링크 된 목록의 다른 작업에도 동일한 아이디어가 제공됩니다. 링크 된 목록의 추가, 삭제, 검색 및 출력을위한 전체 코드는 다음과 같습니다.
클래스 NODEMANAGER {개인 노드 루트; // 루트 노드 개인 int currentIndex = 0; // 노드 일련 번호, 각 조작은 0 public void add (int data) {if (root == null) {root = new Node (data); } else {root.addnode (데이터); }} public void delnode (int data) {if (root == null) 반환; if (root.getData () == data) {노드 tmp = root; root = root.next; tmp = null; } else {root.delNode (데이터); }} 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 (데이터); }} public boolean updateNode (int OldData, int newData) {if (root == null) return false; if (root.getData () == OldData) {root.setData (newData); 진실을 반환하십시오. } else {return root.updatenode (OldData, NewData); }} // public void insert (int index, int data) {if (index <0) return; currentIndex = 0; if (index == currentIndex) {node newNode = 새 노드 (데이터); newnode.next = 루트; 루트 = 뉴 노드; } else {root.insertNode (색인, 데이터); }} // 데이터를 소유 한 사람은 메소드 클래스 노드 {private int data; 개인 노드 다음; // 현재 유형을 속성 공개 노드 (int data) {this.data = data; } public void setData (int data) {this.data = data; } public int getData () {반환 데이터; } // 노드 추가 public void addnode (int data) {if (this.next == null) {this.next = new Node (data); } else {this.next.addnode (데이터); }} // 노드 공개 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 (데이터); }}} // 모든 노드를 출력 공개 void printnode () {if (this.next! = null) {system.out.print (this.next.getData () + ""); this.next.printnode (); }} // 노드가 공개 부울 FindNode (int data) {if (this.next! = null) {if (this.next.getData () == data) {return true; } else {return this.next.findNode (데이터); }} 거짓을 반환합니다. } // 노드 공개 부울 updatenode (int OldData, int newData) {if (this.next! = null) {if (this.next.getData () == OldData) {this.next.setData (newData); 진실을 반환하십시오. } else {return this.next.updatenode (OldData, NewData); }} 거짓을 반환합니다. } // 노드 삽입 public void insertNode (int index, int data) {currentIndex ++; if (index == currentIndex) {node newNode = 새 노드 (데이터); newnode.next = this.next; this.next = newnode; } else {this.next.insertNode (색인, 데이터); }}}}}위는 링크 된 목록의 기본 작동을위한 완전한 코드입니다. 다음은 테스트를위한 통화 코드이며 코드는 다음과 같습니다.
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 ( "링크 된 목록의 삭제 (delete 3)"); nm.delnode (3); nm.print (); System.out.println ( "링크 된 목록보기 (찾기 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 Collection 클래스의 소스 코드를 배웁니다. 나는 주니어 프로그래머가되기 위해 열심히 일할 것입니다!
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.