数据结构与算法JavaScript描述(1) —— 列表(List )

前端之家收集整理的这篇文章主要介绍了数据结构与算法JavaScript描述(1) —— 列表(List )前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一组有序的数据集合,集合中的每个数据项叫做元素,可对这些数据项进行增删改查操作。

应用:存储数据,进行数据的简单查找和排序

实现:

class List {
constructor() {
    this.elements = []
    this.pos = 0            // 列表的当前位置
}

// 返回列表中元素的个数
get length() {
    return this.elements.length
}

// 清空列表中的所有元素
clear() {
    this.elements = []
}

// 在列表中查找某一元素
find(ele) {
    return this.elements.indexOf(ele)
}

// 返回列表的字符串形式
toString() {
    return this.elements.toString()
}

// 在现有元素后插入新元素
insert(after,ele) {
    if (this.find(after) > -1) {
        const index = this.find(after) + 1
        this.elements.splice(index,ele)
        return true
    }
    return false
}

// 给列表<a href="/tag/tianjia/" target="_blank" class="keywords">添加</a>元素
append(ele) {
    this.elements.push(ele)
}

// 从列表中<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>元素
remove(ele) {
    if (this.find(ele) > -1) {
        this.elements.splice(this.find(ele),1)
        return true
    }
    return false
}

// 返回列表的当前位置
currPos() {
    return this.pos
}

// 返回当前位置的元素
getElement() {
    return this.elements[this.pos]
}

// 将列表的当前位置设移动到第一个元素
front() {
    this.pos = 0
}

// 将列表的当前位置移动到最后一个元素
end() {
    this.pos = this.length - 1
}

// 将当前位置前移一位
prev() {
    if (this.pos > 0) {
        this.pos--
        return this.getElement()
    }
}

// 将当前位置后移一位
next() {
    if (this.pos < this.length - 1) {
        this.pos++
        return this.getElement()
    }
}

// 将当前位置移动到指定位置
moveTo(pos) {
    if (pos >= 0 &amp;&amp; pos < this.length) {
        this.pos = pos
        return this.getElement()
    }
}

// 实现一个迭代器(Iterator),可以使用for...of...循环
/**
 * next(): 返回 { value: all_type,done: Boolean }
 * value: 列表中的某个值
 * done: 标明迭代是否结束
 */
[Symbol.iterator]() {
    this.pos = 0
    return {
        next: () => {
            this.pos++
            if (this.pos > this.length) {
                return {
                    value: null,done: true
                }
            } else {
                return {
                    value: this.elements[this.pos - 1],done: false
                }
            }
        }
    }
}

}

示例:

// test 
var names = new List()
names.append('Clayton')
names.append('Raymond')
names.append('Cynthia')
names.append('Jennifer')
names.append('Bryan')
names.append('Danny')
names.insert('Cynthia','Hysunny')
console.log(names.toString())            // Clayton,Raymond,Cynthia,Hysunny,Jennifer,Bryan,Danny

console.log(names.currPos()) // 0
names.front()
console.log(names.getElement()) // Clayton
names.next()
console.log(names.getElement()) // Raymond
names.moveTo(4)
console.log(names.getElement()) // Bryan

names.remove('Bryan')
console.log(names.toString()) // Clayton,Danny

// 使用迭代器
for (var name of names) {
console.log(name)
}
// Clayton,Danny

names.clear()
console.log(names.length) // 0

猜你在找的JavaScript相关文章