소개 : 일상 생활에서 사람들은 종종 목록을 사용합니다. 예를 들어, 때때로 쇼핑을 가야 할 때, 우리가 가기 전에 구매하고자하는 모든 것을 사기 위해 우리가 사용해야 할 것들의 목록입니다. 또는 우리가 어렸을 때 학교에 있었을 때, 각 시험 후에 학교는이 시험에서 상위 10 명의 학생들의 순위와 성적표를 나열합니다. 이들은 모두 목록의 목록입니다. 우리는 또한 컴퓨터에서 목록을 사용하므로 사용하기에 적합한 목록은 어디에 있습니까? 사용하기에 적합하지 않은 곳은 어디입니까?
사용하기에 적합 : 목록에 요소가 많지 않은 경우 목록의 요소를 검색하거나 정렬 할 때 효율이 매우 높기 때문에 목록을 사용할 수 있습니다. 반대로, 목록에 많은 요소가 있다면 목록을 사용하는 데 적합하지 않습니다.
1 : 목록의 초록 데이터 유형 정의
목록의 추상 데이터 유형을 설계하려면 목록의 속성, 목록에서 수행 해야하는 작업 등을 포함하여 목록의 정의를 제공해야합니다.
목록은 주문한 데이터 세트입니다. 각 목록의 데이터 항목을 요소라고합니다. JavaScript에서 목록의 요소는 모든 데이터 유형 일 수 있습니다. 목록에 얼마나 많은 요소를 저장할 수 있는지에 대한 사전 계약은 없습니다. 그러나 요소 수는 실제로 사용될 때 프로그램 메모리에 의해 제한됩니다.
이제 목록을 디자인하고 목록 구현에 대해 생각할 수 있습니다. 어떤 속성과 방법을 포함해야합니까? 물론 아래의 디자인은 "JavaScript 데이터 구조 및 알고리즘"이라는 책의 데모를 기반으로 설계되었습니다. 따라서 우리는 앞으로 프로그램을 작성할 때 자신의 추상 수업을 참조로 설계하는 방법을 배울 수 있습니다. 이 책에서 데모에 대해 배우는 가장 중요한 것은 디자인 아이디어와 코드를 작성하는 방법을 배우는 것입니다. 그들은 다음 속성을 가지고 있습니다.
1. ListSize (속성) : ListSize 변수를 사용하여 목록에 요소 수를 저장하십시오.
2. POS (Property) : 목록의 현재 위치, 요소의 색인.
3. Datastore (속성) : 빈 배열을 초기화하여 요소 수를 저장합니다. 특정 목록에서 요소를 얻으려면 위의 POS 속성을 사용할 수 있습니다. Datastore [POS]와 같은;
모든 방법; 다음 목록은 설명되며 하나씩 소개되지 않습니다.
둘 : 목록 클래스를 구현하는 방법
위에서 정의 된 목록 초록 데이터 유형을 기반으로 생성자 + 프로토 타입 패턴을 통해 다음과 같이 다음 목록 클래스를 구현할 수 있습니다.
코드 사본은 다음과 같습니다.
함수 목록 () {
// 목록의 요소 수
this.listsize = 0;
// 목록의 현재 위치는 무엇입니까?
this.pos = 0;
// 빈 배열을 초기화하여 목록 요소를 저장합니다
this.datastore = [];
}
list.prototype = {
// 목록 끝에 요소 추가
부록 : 함수 (요소) {
var self = 이것;
self.datastore [this.listsize ++] = 요소;
},
// 목록에서 요소를 제거합니다
제거 : 함수 (요소) {
var self = 이것;
var curindex = self.find (요소);
if (curindex> -1) {
self.datastore.splice (curindex, 1);
--self.listsize;
진실을 반환하십시오.
}
거짓을 반환합니다.
},
// 목록에서 인덱스를 반환 할 요소를 찾습니다.
찾기 : 함수 (요소) {
var self = 이것;
for (var i = 0, datalen = self.datastore.length; i <datalen; i ++) {
if (self.datastore [i] == 요소) {
반환 i;
}
}
반품 -1;
},
// 목록의 요소 수를 반환합니다
길이 : function () {
this.listsize를 반환하십시오.
},
// 목록에 요소가 표시됩니다
Tostring : function () {
this.datastore;
},
/*
* 지정된 요소 뒤에 요소를 삽입하십시오
* @param 요소 전류 요소
* @Param ElementAfter이 요소 뒤에 현재 요소 삽입
*/
삽입 : 기능 (요소, 요소) {
var self = 이것;
var insertpos = self.find (ElementAfter);
if (insertpos> -1) {
self.datastore.splice (insertpos+1,0, 요소);
++ self.listize;
진실을 반환하십시오.
}
거짓을 반환합니다.
},
// 목록의 모든 요소를 지우십시오
Clear : function () {
this.datastore;
this.datastore = [];
this.listsize = this.pos = 0;
},
// 주어진 요소가 목록에 있는지 확인
포함 : 함수 (요소) {
var self = 이것;
for (var i = 0, ilen = self.datastore.length; i <ilen; i ++) {
if (self.datastore [i] == 요소) {
진실을 반환하십시오.
}
}
거짓을 반환합니다.
},
// 목록의 현재 요소를 첫 번째 위치로 이동
전면 : function () {
this.pos = 0;
},
// 목록의 현재 요소를 마지막 위치로 이동
끝 : function () {
this.pos = this.listsize -1;
},
// 현재 위치를 하나씩 움직입니다
이전 : function () {
if (this.pos> 0) {
-this.pos;
}
},
// 현재 위치를 하나씩 움직입니다
다음 : function () {
if (this.pos <this.listsize -1) {
++ this.pos;
}
},
// 목록의 현재 위치로 돌아갑니다
Curpos : function () {
this.pos를 반환하십시오.
},
// 현재 위치를 지정된 위치로 이동합니다
moveto : function (n) {
this.pos = n;
},
// 현재 위치에서 요소를 반환합니다
getElement : function () {
this.datastore [this.pos];
}
};
위와 같이 : 위와 같이 많은 방법을 포함하여 목록 클래스를 구현하십시오. 물론 목록 클래스의 구현을 풍부하게하기 위해 다른 방법을 확장 할 수도 있습니다. 가장 중요한 것은 위와 같이 인코딩 방법을 배우는 것입니다.