javascript list 集合对象 js list定义_抽象数据类型


数据结构


日常生活中使用列表如:待办事项、购物清单、榜单排名等。计算机程序也在使用列表,尤其是列表中保存的元素不是太多时。当不需要在一个很长的序列中查找元素,或对其进行排序时,列表显得尤为有用。反之,如果数据结构非常复杂,列表的作用就没有那么大了。

列表是一种最自然的数据组织方式,如果数据存储的顺序不重要,也不必对数据进行查找,那么列表就是一种再好不过的数据结构。

抽象数据类型定义

  • 列表是一组有序的数据,每个列表中的数据项称为元素。
  • 不包含任意元素的列表称为空列表
  • 列表中包含元素的个数称为列表的length
  • 列表拥有描述元素位置的属性,列表有前有后。
  • 列表的抽象数据类型并未指明列表的存储结构


javascript list 集合对象 js list定义_数据结构_02


列表



javascript list 集合对象 js list定义_数据结构_03


线性表


列表的抽象数据类型定义

  • position 列表的当前位置
  • length/size 列表元素的个数
  • clear() 清空列表中所有元素
  • toString() 获取列表的字符串形式
  • element() 获取当前位置的元素
  • insert() 向现有元素后插入新元素
  • append() 在列表末尾追加新元素
  • remove() 从列表中移除元素
  • front() 将列表当前位置移动到第一个元素
  • end() 将列表当前位置移动到最后一个元素
  • prev() 将列表当前位置后移一位
  • next() 将列表当前位置前移一位
  • position() 获取列表的当前位置
  • move() 将当前位置移动到指定位置
/*列表*/
function List()
{
    this.data = [];
    this.length = 0;
    this.position = 0;


    //判断给定值是否在列表中
    var contains = function(element){
        for(var i=0; i<this.length; ++i){
            if(this.data[i] === element){
                return true;
            }
        }
        return false;
    };
    //从列表中查找元素,成功返回索引,失败返回-1.
    var find = function(element){
        for(var i=0; i<this.length; ++i){
            if(this.data[i] === element){
                return i;
            }
        }
        return -1;
    };
    //为列表末尾追加元素
    var append = function(element){
        this.data[this.length++] = element;
    };
    //向列表元素之后插入
    var insert = function(element,after){
        var index = this.find(after);
        if(index > -1){
            this.data.splice(index,1,element);
            ++this.length;
            return true;
        }
        return false;
    };
    //从列表中删除元素
    var remove = function(element){
        var index = this.find(element);
        if(index > -1){
            this.data.splice(index,1);
            --this.length;
            return true;
        }
        return false;
    };
    //获取列表长度,即列表中元素的个数。
    var size = function(){
        return this.length;
    };
    //显示列表中的元素
    var toString = function(){
        return this.data;
    };
    //清空列表中所有元素
    var clear = function(){
        this.length = 0;
        this.position = 0;
        delete this.data;//删除数组
        this.data = [];
    };

    //当前项目
    var curele = function(){
        return this.data[this.position];
    };
    var curpos = function(){
        return this.position;
    };
    //在列表自由移动
    var front = function(){
        this.position = 0;
    };
    var end = function(){
        this.position = this.length-1;
    };
    var prev = function(){
        if(this.position > 0){
            --this.position;
        }
    };
    var next = function(){
        if(this.position < this.length-1){
            ++this.position;
        }
    };
    var moveto = function(position){
        this.position = position;
    };

    this.append = append;
    this.size = size;
    this.toString = toString;
    this.find = find;
    this.remove = remove;
    this.clear = clear;
    this.contains = contains;
    //当前项目
    this.curele = curele;
    this.curpos = curpos;
    //迭代器行为
    this.front = front;
    this.end = end;
    this.prev = prev;
    this.next = next;
    this.moveto = moveto;
}