데이터 구조 - JS 선형 표 조작 실현
32410 단어 데이터 구조선형 표JS 구현 순서 표JS 단일 체인 테이블 구현
선형 표 는 임의의 위치 에 데 이 터 를 삽입 하고 삭제 할 수 있다.
개념 정의
첫 번 째 와 마지막 요 소 를 제외 하고 모든 데 이 터 는 전구 데이터 요소 와 후계 데이터 요소 만 있 습 니 다.
동작:
List
의 제 i
위치 에 데이터 삽입 val
. List
의 제 i
요 소 를 삭제 합 니 다.List
의 제 i
각 요 소 를 취한 다.순서 표
설명:
len
를 지정 합 니 다.size
.0<=i<=size
.시간 복잡 도 O (n) i<0 || i>size-1
;시간 복잡 도 O (n) 0<=i
코드 구현:
function queueList(len){
//
this.MaxSize = len;
//
this.list = new Array(len);
//
this.size = 0;
}
queueList.prototype = {
getLen(){
return this.size;
},
insert(i,val){
//
if(this.size>=this.MaxSize){
console.error(" , !");
return false;
}else if(i<0 || i>this.size){
console.error(" i !");
return false;
}else{
// , >i 。
for(let j=this.size;j>i;j--){
this.list[j] = this.list[j-1];
}
this.list[i] = val;
this.size++;
return true;
}
},
delete(i){
//
if(this.size<=0){
console.error(" !");
return false;
}else if(i<0 || i>this.size-1){
console.error(" i !");
return false;
}else{
for(let j=i+1;j<this.size - 1;j++){
this.list[j -1] = this.list[j];
}
this.size--;
return true;
}
},
getVal(i){
//
if(i<0 || i>this.size-1){
console.error(" i !");
return false;
}
return this.list[i];
}
}
체인 메모리
데이터 요 소 를 저장 하 는 노드 를 포인터 영역 으로 체인 으로 구성 합 니 다.
단일 체인 테이블 저장 소
링크 를 구성 하 는 노드 는 직접 후계 노드 를 가리 키 는 포인터 필드 만 있 습 니 다.설명:
head
를 키 0
로 정의 하고 헤드 노드 는 데 이 터 를 저장 하지 않 습 니 다.가리 키 는 다음 노드 는 데이터 0
입 니 다.{
val:null, //
next:null, //
}
Symbol
를 사용 하여 키 의 유일 성 을 확보 했다.var MyLinkedList = function() {
// ,
// ‘0’ head
this.list = {
'0':{
next:null
}
};
//
this.attr = {
val:null,
next:null
}
};
MyLinkedList.prototype.get = function(index) {
let head = this.list["0"];
let j = -1;
//
while(head && head.next!==null && j<index){
head = this.list[head.next];
j++;
}
if(j!=index){
console.error(" !");
return -1;
}
return head.val;
};
MyLinkedList.prototype.addAtHead = function(val) {
let obj = Object.assign({},this.attr);
//
let head = this.list["0"];
obj.val = val;
let time = Symbol();
if(head.next!=null){
obj.next = head.next
}
head.next = time;
this.list[time] = obj;
return true;
};
MyLinkedList.prototype.addAtTail = function(val) {
let obj = Object.assign({},this.attr);
//
obj.val = val;
let tail = this.list["0"];
while(tail.next!==null){
tail = this.list[tail.next];
}
let time = Symbol();
tail.next = time;
this.list[time] = obj;
return true;
};
MyLinkedList.prototype.addAtIndex = function(index, val) {
let obj = Object.assign({},this.attr);
// /
let head = this.list["0"];
// index
let j = -1;
while(head.next!==null && j<index-1){
head = this.list[head.next];
j++;
}
if(j!==index-1){
console.error(" !");
return -1;
}
obj.val = val;
let time = Symbol();
obj.next = head.next;
head.next = time;
this.list[time] = obj;
return true;
};
MyLinkedList.prototype.deleteAtIndex = function(index) {
let head = this.list["0"];
let j = -1;
while(head.next!==null &&this.list[head.next].next!=null && j<index-1){
head = this.list[head.next];
j++;
}
if(j!==index-1){
console.error(" !");
return false;
}
//
let id = head.next;
head.next = this.list[head.next].next;
//
Reflect.deleteProperty(this.list,id);
return true;
};
순환 목록
단일 체인 테이블 의 마지막 노드
next
는 헤드 노드 head
를 가리 키 고, 단일 체인 테이블 의 예시 0
키 값 을 가리킨다.구별 설명:'0':{
next:'0'
}
head.next!=null
에서 head.next!='0'
로 변경;양 방향 링크
차이 점 과 단일 체인 표: 각 노드 에 전구 지침 이 있 고 이전 노드 를 가리킨다.순환 과 비 순환 양 방향 링크 로 나 뉜 다.설명:
'0'{
prior:'0',
next:'0'
}
//
{
prior:null,
val:null,
next:null
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.