数据结构与算法的JavaScript描述——列表

数据结构与算法的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());
    }
  • 迭代器只是用来在列表上随意移动,而不应该和任何为列表增加或删除元素的方法一起使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值