美文网首页
js系列之列表

js系列之列表

作者: shui水mo墨 | 来源:发表于2019-07-06 14:12 被阅读0次

    列表是一组有序的数据。每个列表中的数据项被称为元素。列表包含对应的属性和方法。
    接下来,我们来实现一个完整的列表类。

    function myList()
    {
        this.listSize=0;    //列表的大小
        this.pos=0;         //列表当前元素的位置
        this.dataStore=[];    //存储数据
        this.append=append;    // 在列表结尾添加元素
        this.find=find;       //根据元素的值,寻找元素在列表中的位置
        this.remove=remove;    //删除列表中已知数值的数据
        this.insert=insert;    //在某个元素后面添加新元素
        this.clear=clear;      //清除列表中的元素
        this.length=length;  //获得列表的大小
        this.toString=toString;  //查看列表
        this.front=front;    //将列表的当前位置移动到第一个元素
        this.end=end;      //将列表的当前位置移动到最后一个元素
        this.prev=prev;      //将当前位置前移一位
        this.next=next;    //将当前位置后移一位
        this.currPos=currPos;  //返回当前位置
        this.getElement=getElement;  //返回对应当前位置的数值
    }
    

    列表结尾添加元素

    function append(data)
    {
        this.dataStore.push(data);
        this.listSize++;
    }
    

    寻找元素在列表中的位置,如果找到返回对应的索引,如果没找到返回-1。

    function find(data)
    {
        for(var i=0;i<this.dataStore.length;i++)
        {
            if(this.dataStore[i]==data)
            {
                return i;
            }
        }
        return -1;
    }
    

    删除列表中已知数值的数据:首先,找到该元素的索引,然后进行删除操作。

    function remove(data)
    {
        var index_data=this.find(data);
        if(index_data>=0)
        {
            this.dataStore.splice(index_data,1);
            this.listSize--;
            return true;
        }
        return false;
    }
    

    在某个元素后面添加新元素

    function insert(element,after)
    {
        var index_data=this.find(after);
        if(index_data>=0)
        {
            this.dataStore.splice(index_data,0,element);
            this.listSize++;
            return true;
        }
        return false;
    }
    

    清除列表中的元素

    function clear()
    {
        delete this.dataStore;
        this.dataStore=[];
        this.pos=this.listSize=0;
    }
    

    获取列表的大小

    function length()
    {
        return this.listSize;
    }
    

    查看列表

    function toString()
    {
        return this.dataStore;
    }
    

    对当前元素的操作,将当前位置 设置 为头或尾

    function front()
    {
        this.pos=0;
    }
    function end()
    {
        this.pos=this.listSize-1;
    }
    

    以下是将当前位置前移或者后移一位

    function prev()
    {
        if(this.pos>0)
        {
            this.pos=this.pos-1;
        }
    }
    function next()
    {
        if(this.pos<(this.listSize-1))
        {
            this.pos=this.pos+1;
        }
    }
    function currPos()
    {
        return this.pos;
    }
    function getElement()
    {
        return this.dataStore[this.pos];
    }
    

    整个抽象的类已经创建好了,接下来我们开始使用了。

    //创建一个由水果组成的列表
    var fruits=new myList();
    //添加元素
    fruits. append("apple");
    fruits. append("pear");
    fruits. append("banana");
    fruits. append("orange");
    //打印列表
    console.log(fruits.toString());
    //移动到列表中的第一个元素
    fruits.front();
    console.log(fruits. getElement());
    //移动到列表的下一个元素
    fruits.next();
    console.log(fruits. getElement());
    //移动到列表的上一个元素
    fruits.prev();
    console.log(fruits. getElement());
    //移动到列表中的最后一个元素
    fruits.end();
    console.log(fruits. getElement());
    //指定元素后面添加元素
    fruits.insert("purple","banana");
    console.log(fruits.toString());
    //删除指定元素
    fruit.remove("purple");
    console.log(fruits.toString());
    

    接下来我们看看迭代器。
    使用迭代器可以不关心数据的内部存储方式,以实现对列表的遍历。
    用迭代器与数组索引的方式相比的优点:
    (1) 访问列表可以不关心底层的数据结构;
    (2) 可以使用不同类型的数据存储方式,来实现列表。
    (3) 当列表添加元素时,列表的索引修改了,此时可以单独更新列表,而不需要修改迭代器。

    for(fruits.front(); fruits.currPos() < fruits.length(); fruits.next()) 
    {
        print(fruits.getElement());
    }
    

    相关文章

      网友评论

          本文标题:js系列之列表

          本文链接:https://www.haomeiwen.com/subject/dqmshctx.html