JavaScript(단일 체인 테이블)의 데이터 구조 및 알고리즘 섹션 1
체인 시계는 무엇입니까?
A linked list consists of nodes where each node contains a data field and a reference(link) to the next node in the list. - geeksforgeeks.org
사용 가능한 작업 목록
A linked list consists of nodes where each node contains a data field and a reference(link) to the next node in the list. - geeksforgeeks.org
밀어넣기: 체인 테이블의 끝에 요소를 삽입합니다.
삽입: 체인 테이블의 주어진 인덱스에 요소를 삽입합니다.
삭제: 체인 테이블의 끝 요소를 삭제합니다.
제거: 체인 테이블이 지정한 인덱스에 있는 요소를 제거합니다.
GetElementAt: 체인 테이블의 색인에 대한 요소를 가져옵니다.
IndexOf: 체인 테이블의 요소에 대한 색인을 반환합니다.
자바스크립트에서의 체인 테이블 구현
두 가지 속성 데이터로 ES6 클래스 노드를 정의하고,
데이터 속성은 보존됩니다. 체인 테이블에 삽입된 데이터와 다음 속성은 보존되고 다음 노드의 지침을 가리킵니다.체인 테이블은 다음 포인터가 서로 연결된 노드 체인일 뿐입니다.바늘이 뭐예요?포인터는 위의 그림과 같이 목록의 다음 구성원을 가리킨다.
class Node {
constructor(element){
this.element = element;
this.next = null;
}
}
이제 세 가지 속성을 가진 ES6 클래스 체인 테이블을 정의합니다.계산은 체인 테이블의 디지털 요소를 추적합니다.머리는 항상 체인 테이블의 시작 노드를 가리키지만, 처음에는 정의되지 않고 체인 테이블의 두 노드를 비교하는 것과 같다.단일 체인 테이블에서 우리는 머리 노드에 대한 인용만 있을 뿐이다.그래서 체인 시계를 두루 훑어봐야 한다. 우리는 항상 머리부터 시작해서 그것을 두루 훑어본다.그래서 다음 방법은 항상 머리부터 시작한다.
class LinkedList {
constructor(func) {
this.count = 0;
this.head = undefined;
this.equalFunc = func || defaultEq;
}
}
밀다
체인 테이블 끝에 요소를 추가할 때 다음과 같은 두 가지 경우가 있습니다.
push(element) {
const node = new Node(element);
let current = this.head;
if (this.head == undefined) {
this.head = node; //1
}else{
while (current.next != null) { //2
current = current.next
}
current.next = node; //3
}
this.count++ //4;
return;
}
GetElementAt 회사
색인을 통해 요소를 얻기 위해서, 우리는 먼저 변수 노드를 정의하고, 헤드 ({1}) 를 인용하며, 색인의 경계 오류를 검증합니다. 검사를 통해 색인이며, 0보다 크고count보다 작습니다.({2}); 없으면 정의되지 않은 ({5}) 을 되돌려줍니다. 이제 0부터 체인 테이블을 인덱스 ({3}) 로 교체하고 노드 ({4}) 로 되돌려줍니다.이 방법은 체인 테이블의 모든 위치에 있는 요소를 삽입하고 삭제할 때 매우 유용하다.
getElementAt(index) {
let node = this.head; // 1
if (index >= 0 && index < this.count) { //2
for (let i = 0; i < index; i++) { //3
node = node.next;
}
return node; //4
}
return undefined; //5
}
삽입
주어진 위치에 요소 삽입하기;색인은 0보다 크고count보다 작아야 합니다. 두 가지 상황이 있습니다.
우리는 우선 변수 노드를 정의할 것이다. 이 노드는 머리를 가리킨다.
인덱스 0({1})
인덱스가 0보다 큽니다({2})
insert(element, postion) {
if (postion >= 0 && postion <= this.count) {
const node = new Node(element);
let current = this.head;
if (postion == 0) { //1
if (this.head == undefined) {
this.head = node;
}
this.head = node;
node.next = current;
} else {
let previous = this.getElementAt(postion - 1);
current = previous.next;
node.next = current;
previous.next = node;
}
this.count++;
}
}
전체 소스를 얻을 수 있습니다 here결론:
방법
복잡성
모든 위치에 삽입
O(n)
머리에 삽입
O(1)
GetElementAt 회사
O(n)
그래서 다음 블로그에 계속 관심을 가져 주십시오. 그 중에서 나머지 방법을 소개하겠습니다.
Reference
이 문제에 관하여(JavaScript(단일 체인 테이블)의 데이터 구조 및 알고리즘 섹션 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/swarup260/data-structures-algorithms-in-javascript-single-linked-list-part-1-3ghg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)