数据结构与算法的JavaScript描述——列表
说明:以下部分均为《数据结构与算法的JavaScript描述》学习内容及笔记。
1、实现列表类
function List(){
this.listSize=0;
this.pos=0;
this.dataStore=[];//初始化一个空数组来保存列表元素
this.clear=clear;
this.find=find;
this.toStirng=toString;
this.insert=insert;
this.append=append;
this.remove=remove;
this.front=front;
this.end=end;
this.prev=prev;
this.next=next;
this.length=length;
this.currPos=currPos;
this.moveTo=moveTo;
this.getElement=getElement;
this.contains=contains;
}
1.1 append:添加元素
function append(element){
this.dataStore[this.listSize++]=element;
}
1.2:查找元素
function find(element){
for(var i=0;i<this,dataStore.length;++i){
if(this.dataStore[i]==element){return i;}
}
return -1;
}
1.3 remove:删除元素
function remoev(element){
var foundAt=this.find(element);//先找再删
if(foundAt>-1){
this.dataSource.splice(foundAt,1);
--this.listSize;
return true;
}
return false;
}
1.4 length:多少元素
function length(){
return this.listSize;
}
1.5 toString:显示列表中元素
function toString(){
return this.dataStore;
}
1.6 insert:插入元素
function insert(element,after){
var insertPos=this.find(after);
if(insertPos>-1){
this.dataStore.splice(insertPos+1,0,element);
return true;
}
return false;
}
1.7 clear:清空元素
function clear(){
delete this.dataStore;//先删除
this.dataStore=[];//再生成
this.liseSize=this.pos=0;//重新设值
}
1.8 contains:是否存在
function contains(element){
for(var i=0;i<this.dataStore.length;++i){
if(this.dataStore[i]==element){return true}
}
return false;
}
1.9 front、end、prev、next、currPos、moveTo、getElement:遍历列表
function front(){
this.pos=0;
}
function end(){
this.pos=this.listSize-1;
}
function prev(){
if(this.pos>0){
--this.pos;
}
}
function next(){
if(this.pos<this.listSize-1){
++this.pos;
}
}
function currPos(){
return this.pos;
}
function moveTo(position){
this.pos=position;
}
function getElement(){
return this.dataStore[this.pos];
}
2、使用迭代器访问列表
迭代器可以不必关心数据内部的存储方式,以实现对列表的遍历。以下是与使用索引相比,使用迭代器的优点:
- 访问列表元素时不必关心底层的数据存储结构。
- 当为列表添加一个元素时,索引的值就不对了,此时只用更新列表,而不用更新迭代器。
- 可以用不同的类型的数据存储方式实现clist类,迭代器为访问列表里的元素提供一种统一的方式。
for(names.front();names.currPos()<names.length();names.next()){
print(names.getElement());
}
- 迭代器只是用来在列表上随意移动,而不应该和任何为列表增加或删除元素的方法一起使用。