나는 최근에 링크 된 목록에 대해 물었고 친구는 Java를 나와 이야기 할 때 그것을 말했습니다. 솔직히 말해서, 나는 작년에 프로그래밍을 배운 것을 거의 배웠습니다. 나는 언어로 Java와 C#을 배웠고 웹에 대한 HTML+CSS+JavaScript에 대해 조금 배웠습니다. 나는 그것을 선호하기 때문에 WinForm을 학습 할 때 더 진지하며 데이터베이스 작업을 직접 연구했습니다. 그러나 나는 링크 된 목록을 연구하거나 연구 한 적이 없습니다. 또한 최근에 WPF를 읽었으며 코스가 JSP에 도달했습니다.
그러나 나는 여전히 일방 통행 링크 목록을 보는 데 밤 30 일이 걸렸습니다. 그리고 Java를 사용하여 예제를 작성하려고했습니다. 링크 된 목록에 노출되지 않은 친구는 참조로 사용할 수 있습니다. 더 귀중한 제안을하시기 바랍니다.
먼저 링크 된 목록이 무엇인지 설명해 봅시다. 내가 아는 한, 링크 된 목록은 배열과 같은 수준 인 데이터 구조입니다. 예를 들어, Java에서 사용하는 Arraylist의 구현 원리는 배열입니다. LinkedList의 구현 원리는 링크 된 목록입니다. 선생님은 순환시 링크 된 목록이 효율적이지 않지만 삽입 및 삭제할 때 명백한 이점이 있다고 말했습니다. 그런 다음 그는 10 년 이상의 프로그래밍 경험을 가지고 있습니다. 하지만 그가 양방향 링크 된 목록에 대해 이야기하고 있는지 모르겠습니다. 우리는 단방향 링크 된 목록 만 이해하기 위해 여기에 있습니다.
링크 된 목록 (이 기사에서 언급 된 체인은 모두 단방향 링크 된 목록이며 다음은 모두 단방향 링크 목록이라고합니다)은 실제로 노드 (노드)로 구성되어 있으며 링크 된 목록에는 불확실한 노드가 있습니다. 바깥쪽으로 노출 된 헤드 노드 (헤드)는 하나 뿐이며 링크 된 목록의 모든 작업은 헤드 노드를 통해 직접 또는 간접적으로 수행됩니다.
노드는 저장 해야하는 객체와 다음 노드에 대한 참조로 구성됩니다. 즉, 노드에는 두 개의 멤버가 있습니다 : 저장된 객체, 다음 노드에 대한 참조.
당신은 이것을 잘 이해하지 못할 수도 있고, 내가 사진을 게시하면 이해하기가 더 쉬울 수 있습니다.
Java 단일 링크 된 목록의 기본 작업을 구현하기위한 주요 코드는 다음과 같습니다.
패키지 com.tyxh.link; // 노드 클래스 공개 클래스 노드 {보호 노드 다음; // 포인터 필드 보호 int 데이터; // 데이터 필드 공개 노드 (int data) {this. 데이터 = 데이터; } //이 노드를 표시 공개 void display () {System. out.print (data + ""); }} 패키지 com.tyxh.link; // 단일 연결 목록 공개 클래스 linklist {public node first; // 헤더 개인 int pos = 0; // 노드의 위치 public linklist () {this. 첫 번째 = null; } // 헤드 노드 삽입 공용 void addFirstNode (int data) {노드 노드 = 새 노드 (data); 마디. 다음 = 첫 번째; 첫 번째 = 노드; } // 헤드 노드를 삭제하고 헤드 노드 공개 노드를 반환합니다. deletefirstnode () {Node tempnode = first; 첫 번째 = tempnode. 다음; 반환 온도; } // 모든 위치에 노드를 삽입하고 index add (int index, int data) {노드 노드 = 새 노드 (data); 노드 전류 = 첫 번째; 노드 이전 = 첫 번째; while (pos! = index) {previous = current; current = current. 다음; pos ++; } 노드. 다음 = 현재; 이전의. 다음 = 노드; pos = 0; } // 모든 위치에서 노드 삭제 공개 노드 deletebypos (int index) {노드 current = first; 노드 이전 = 첫 번째; while (pos! = index) {pos ++; 이전 = 현재; current = current. 다음; } if (current == first) {첫 번째 = 첫 번째. 다음; } else {pos = 0; 이전의. 다음 = 현재. 다음; } 현재 반환; } // 노드의 데이터에 따라 노드를 삭제합니다 (첫 번째 데이터 만 삭제) 공개 노드 deletebyData (int data) {Node current = first; 노드 이전 = 첫 번째; // 이전 노드를 기억하십시오. } previous = current; current = current. 다음; } if (current == first) {첫 번째 = 첫 번째. 다음; } else {이전. 다음 = 현재. 다음; } 현재 반환; } // 모든 노드 정보 표시 public void displayAllNodes () {Node current = first; while (current! = null) {current.display (); current = current. 다음; } 시스템. out.println (); } // 위치를 기반으로 노드 정보 찾기 공개 노드 findBypos (int index) {노드 current = first; if (pos! = index) {current = current. 다음; pos ++; } 현재 반환; } // 데이터 공개 노드를 기반으로 노드 정보 찾기 findByData (int data) {Node current = first; while (current. data! = data) {if (current. next == null) return null; current = current. 다음; } 현재 반환; }} 패키지 com.tyxh.link; // 테스트 클래스 공개 클래스 testLinkList {public static void main (String [] args) {linklist linklist = new LinkList (); linklist.addfirstnode (20); linklist.addfirstnode (21); linklist.addfirstnode (19); // 19,21,20 linklist.add (1, 22); // 19,22,21,20 linklist.add (2, 23); // 19,22,23,21,20 linklist.add (3, 99); // 19,22,23,99,21,20 LinkList.DisplayAllNodes (); // node node = linklist.deleteFirstNode (); // system.out.println ( "노드 :" + node.data); // linkList.DisplayAllNodes (); // node = linklist.deletebypos (2); // system.out.println ( "노드 :" + node.data); // linkList.DisplayAllNodes (); // linkList.DeleteFirstNode (); 노드 노드 = linkList.DeleteByData (19); // node node = linklist.deletebypos (0); 체계. out.println ( "노드 :" + 노드. 데이터); linklist.displayAllNodes (); 노드 노드 1 = linklist.findbypos (0); 체계. out.println ( "node1 :" + node1. data); 노드 노드 2 = linklist.findbyData (22); 체계. out.println ( "node2 :" + node2. data); }}위의 것은 편집자가 소개 한 Java 단일 링크 목록의 기본 작업을 구현하는 것입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!