乐趣区

关于JS数据结构-之-列表

1. 概念

列表是一组有序数据的集合,其中的每项数据被称为 元素 。在 js 中,列表中的元素可以是任意数据类型。列表中可以保存任意多个元素(在实际使用时会受到程序内存的限制)。

2. 属性和方法

列表中有一些常见的属性和方法,下面一一列举:

  • listSize(属性):列表的元素个数
  • position(属性):列表当前的位置
  • clear(方法):清空列表中的所有元素
  • getElement(方法):获取当前位置上的元素
  • find(方法):在列表中查找一个元素
  • insert(方法):在现有元素后插入新元素
  • append(方法):在列表末尾插入新元素
  • remove(方法):从列表删除元素
  • front(方法):将列表的当前位置移动到第一个元素
  • end(方法):将列表的当前位置移动到最后一个元素
  • prev(方法):将当前位置向前移动一位
  • next(方法):将当前位置向后移动一位
  • moveTo(方法):将当前位置移动到指定位置

3.JS 代码实现一个列表类

我们先定义一个列表类,将列表的属性和方法包装在类里

function List(){this.dataSet = []// 初始化一个空数组来保存列表元素
    this.pos = 0// 初始化一个属性表示列表当前的位置
    this.listSize = 0 // 初始化一个属性表示列表元素个数
    this.clear = clear;// 清空列表里的元素
    this.find = find;// 在列表上查找一个元素
    this.getElement = getElement;// 返回当前位置的元素
    this.toString = toString;// 将列表作为字符串展示
    this.insert = insert;// 在当前元素后插入新元素
    this.append = append;// 在列表末尾插入新元素
    this.remove = remove;// 从列表中删除元素
    this.front = front;// 将当前位置移到列表头部
    this.end = end;// 将当前位置移到最后一个元素
    this.prev = prev;
    this.next = next
    this.currPos = currPos;
    this.moveTo = moveTo;
    this.contains = contains;}

有了这个类,我们就可以执果索因,一步步将完整的构造函数写出来

3.1 实现 clear 方法

function clear(){
    delete this.dataSet;// 删除原来的 dataSet
    this.dataSet = [];// 将新数组赋给 dataSet
    this.pos = this.listSize = 0;// 将数组当前位置和数组长度初始化为 0
}

3.2 实现 find 方法

function find(element){for(var i=0;i<this.dataSet.length;i++){if(this.dataSet[i]===element){return i // 若找到了 element,则返回该元素的位置}
    }
    return -1 // 若没有在 dataSet 中找到 element,则返回 -1

}

3.3 实现 getElement 方法

function getElement(pos){return this.dataSet[this.pos]
}

3.4 实现 toString 方法

function toString(){return this.dataSet}

3.5 实现 insert 方法

function insert(element){this.dataSet.splice(this.pos,0,element);
}

3.6 实现 append 方法

function append(element){this.dataSet[this.listSize++]=element;
}

3.7 实现 remove 方法

function remove(element){var nowPos = this.find(element);
    if(nowPos>-1){this.dataSet.splice(nowPos,1)
        this.listSize—-; // 删除元素后要把 listSize 也减一
        return true // 删除成功,则返回 true
    }
    return false // 若删除不成功,则返回 false
}

3.8 实现六个操作 position 的方法

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(newPos){if(newPos>=0&&newPos<=this.listSize-1){this.pos = newPos}
}

3.9 实现 contains 方法

function contains(element){var res = this.find(element);
    if(res>-1){return true}else{return false}
}
退出移动版