数据结构与算法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
}

// 给列表添加元素
append(ele) {
    this.elements.push(ele)
}

// 从列表中删除元素
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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)