Java 데이터 구조 및 알고리즘.쌍사슬시계
7397 단어 computersciencetristanjava
소개하다.
Data Structures and Algorithms in Java by Michael T. Goodrich and Roberto Tamassia
과 캘리포니아주립이공대학 과정HERE에서 나온다고 큰 소리로 말했다. 이 과정은 무료로 찾을 수 있다.이 책을 사지 마세요. 비싸서 인터넷에서 찾을 수 있고 훨씬 싸요.유튜브 버전:
GitHub 코드
무엇이 쌍사슬시계입니까?
doubly
라고 명명되었다. 한 노드는 두 개의 인용이 있기 때문에 하나는 그 앞의 노드를 가리키고 다른 하나는 그 뒤의 노드를 가리킨다.첫 번째 노드와 끝 노드.
sentinel nodes
를 추가하면 도움이 됩니다.이sentinel 노드들은 메인 링크 목록의 어떤 요소도 저장하지 않고 목록의 크기를 계산하지 않습니다.왜 보초 노드를 사용합니까?
노드 생성
2) 이전: 이전 노드에 대한 참조
3) 다음: 다음 노드에 대한 참조
public class DoublyLinkedList <E>{
private static class Node<E>{
private E element;
private Node<E> previous;
private Node<E> next;
public Node(E element, Node<E> previous, Node<E> next) {
this.element = element;
this.previous = previous;
this.next = next;
}
//GETTERS
public E getElement() {
return this.element;
}
public Node<E> getPrevious(){
return this.previous;
}
public Node<E> getNext(){
return this.next;
}
//SETTERS
public void setNext(Node<E> next) {
this.next = next;
}
public void setPrevious(Node<E> previous) {
this.previous = previous;
}
}
}
인스턴스 변수
1) header: header sentinel 노드에 대한 참조 저장
2) 트레일러: 트레일러 센티넬 노드에 대한 인용 저장
3) 크기: 목록에 몇 개의 노드가 있는지 표시하는 정수 값을 저장합니다
public class DoublyLinkedList <E>{
// The rest of the node class is above.
private Node<E> header;
private Node<E> trailer;
private int size =0;
}
쌍사슬표 구조 함수
public DoublyLinkedList(){
header = new Node<>(null,null,null);
trailer = new Node<>(null,header,null);
header.setNext(trailer);
}
쌍사슬표 방법
2) isEmpty(): 목록이 비어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
3) first (): 목록의 첫 번째 요소를 되돌려줍니다.
4) last (): 목록의 마지막 요소를 되돌려줍니다.
5) addFirst(e): 목록 앞에 새 요소를 추가합니다.
6) addLast(e): 목록 끝에 새 요소를 추가합니다.
7)removeFirst(): 목록의 첫 번째 요소를 삭제하고 반환합니다.
8)removeLast(): 목록의 마지막 요소를 삭제하고 반환합니다.
2)remove (): 삭제된 일반적인 상황을 처리하려면removeFirst () 와removeLast () 가 호출합니다
검색 방법 구현
public class DoublyLinkedList <E>{
// The rest of the class is above.
public int size() {
return this.size;
}
public boolean isEmpty() {
return size == 0;
}
public E first() {
if (isEmpty()) {
return null;
}else {
return header.getNext().getElement();
}
}
public E last() {
if(isEmpty()) {
return null;
}else {
return this.trailer.getPrevious().getElement();
}
}
}
업데이트 방법 구현
public void addFirst(E e) {
addBetween(e,header,header.getNext());
}
public void addLast(E e) {
addBetween(e,trailer.getPrevious(),trailer);
}
public E removeFirst() {
if(isEmpty()) {
return null;
}else {
return remove(header.getNext());
}
}
public E removeLast() {
if(isEmpty()) {
return null;
}else {
return remove(trailer.getPrevious());
}
}
private void addBetween(E e,Node<E> predecessor, Node<E> successor) {
Node<E> newest = new Node<>(e,predecessor,successor);
predecessor.setNext(newest);
successor.setPrevious(newest);
size++;
}
private E remove(Node<E> node) {
Node<E> predecessor = node.getPrevious();
Node<E> successor = node.getNext();
predecessor.setNext(successor);
successor.setPrevious(predecessor);
size--;
return node.getElement();
}
removing
하나의 노드일 때, 우리는 실제적으로 다른 노드가 그것을 인용하지 않도록 확보하는 것뿐이다.자바에서 대상이 다른 인용 대상이 없을 때 removed
메모리를 메모리 풀로 되돌려줍니다.그래서 하나의 노드를 제거하는 것은 이렇게 보인다. 결론
Reference
이 문제에 관하여(Java 데이터 구조 및 알고리즘.쌍사슬시계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theplebdev/java-data-structures-and-algorithms-doubly-linked-list-38j9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)