JavaScript数据结构 ---- 列表

JavaScript数据结构 ---- 列表

列表是一组有序的数据。每个列表的数据称为元素,列表中可以保存多少元素没有事先限定,实际使用时元素的数量受到程序内存的限制。


实现列表类
根据抽象数据类型,可以实现一个 List 类。

function List() {
    this.listSize = 0;        // 元素的个数
    this.pos = 0;
    this.dataStore = []       //初始化一个空数组
    this.clear = clear;       // 清空元素
    this.find = find;         // 查找元素
    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.length = length;     // 返回列表中的元素个数
    this.currPos = currPos;   // 返回列表的当前位置
    this.moveTo = moveTo;     // 将当前位置移动到指定位置
    this.getElement = getElement; // 显示当前元素
    this.contains = contains;  //判断给定值是否在列表中 
}

append:给列表添加元素
方法 append() 给列表的下一个位置增加一个新的元素,这个位置刚好等于变量 listSize 的值,当新元素就位后,变量 listSize 加 1。

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

find :在列表中查找元素
find() 方法通过对数组对象进行 dataStore 进行迭代,查找给定的元素。如果找到,就返回该元素在列表中的位置,否则返回 -1。

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

remove:从列表中删除元素
实现从列表中删除一个元素,首先需要在列表中找到该元素,然后删除它,并且调整底层的数组对象填充删除该元素后留下的空白。
remove() 方法使用 find() 方法返回的位置对数组 dataStore 进行截取。数组改变后,将变量 listSize 的值减 1,以反映列表的最新长度。若成功删除元素,返回 true,否则返回 false。

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

length:列表中有多少元素

function length() {
    return this.listSize;
}

toString:显示列表中的元素

function toString() {
    return this.dataStore;
}

insert:向列表中插入一个元素
insert() 方法需要知道将元素插入到什么位置,可以假设插入是指插入到列表中某个元素之后。

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

clear:清空列表中所有的元素
clear() 方法使用 delete 操作符删除 dataStore,接着在下一行创建一个空数组。最后一行将 listSize 和 Pos 的值设为 0,表示这是一个新的空列表。

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

constains:判断给定值是否在列表中

function contains(element) {
    for (var i = 0; i < this.dataStore.length; i++) {
        if (this.dataStore[i] == element) {
            return true;
        }
    }
    return false;
}

遍历列表
以下这些方法允许在列表中移动。

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];
}

参考资料:
JavaScript高级程序设计
JavaScript MDN
Data Structures and Algorithms with JavaScript

你可能感兴趣的:(JavaScript数据结构 ---- 列表)