1. 结构分析

列表首先要有以下几个属性:

  listSize 长度

  pos 当前位置

  dataStore 数据

我们要通过以下方法对上面三个属性进行操作:

  length() 获取长度 | getPos() 获取当前位置   |   toString() 打印list内容

  add(ele) 顺序添加元素   |   insert(newEle, afterEle) 在某元素后插入元素  |  remove(ele) 删除某元素

  clear() 清空列表  |  find(ele) 查询元素位置  |  get(index) 根据位置获取元素  |  contain(ele) 是否包含某元素

  prev() 下标前移一位  |  next() 下标后移一位   |   front() 定位到头部  |   end() 定位到尾部

2. 实现:

function List(){
    this.listSize = 0;
    this.dataStore = [];
    this.pos = 0;

    this.length = function(){
        return this.listSize;
    };
    this.getPos = function(){
        return this.pos;
    };
    this.prev = function(){
        this.pos--;
    };
    this.next = function(){
        this.pos++;
    };
    this.front = function(){
        this.pos = 0;
        return 0;
    };
    this.end = function(){
        this.pos = this.listSize;
        return this.listSize;
    };
    this.find = function(ele){
        for(var i=0; i<this.listSize; i++){
            if(this.dataStore[i] === ele){
                return i;
            }
        }
        return -1;
    };
    this.add= function(ele){
        this.dataStore[this.listSize++] = ele;
    };
    this.insert = function(ele, afterEle){
        var index = this.find(afterEle);
        if(index > -1){
            this.dataStore.splice(index, 0, ele);
            this.listSize++;
            return true;
        }else{
            return false;
        }
    };
    this.remove = function(ele){
        var index = this.find(ele);
        if(index > -1){
            this.dataStore.splice(index, 1);
            this.listSize--;
            return true;
        }
        return false;
    };
    this.clear = function(){
        delete this.dataStore;
        this.dataStore = [];
        this.listSize = this.pos = 0;
    };
    this.contains = function(ele){
        if(this.find(ele) > -1){
            return true;
        }else{
            return false;
        }
    };
    this.get = function(index){
        return this.dataStore[index];
    };
    this.toString = function(){
        return this.dataStore.toString();
    };
}

3. 应用:

var users = ['Jenny', 'Penny', 'Tenny', 'Anny', 'Lily'];
var list = new List();
for (var i = 0; i <users.length - 1; i++) {
    list.add(users[i]);
}
for(list.front(); list.getPos()<list.length(); list.next()){
    console.info(list.getPos() + ":" + list.get(list.curPos()));
}

  

javascript 数据结构和算法读书笔记 > 第三章 列表的更多相关文章

  1. javascript 数据结构和算法读书笔记 > 第五章 队列

    队列是一种列表,但是它只能够在队尾插入元素,在队首删除元素.队列用于存储按照顺序排列的数据,先进先出.而栈则是后入栈的元素反而被优先处理. 实际中一般被应用在进程池.排队操作上面. 1. 队列的操作 ...

  2. javascript 数据结构和算法读书笔记 > 第四章 栈

    1. 对栈的操作 栈是一种特殊的列表,栈中的元素只能通过列表的一端进行访问,即栈顶.类似于累起一摞的盘子,只能最后被放在上面的,最先能被访问到. 就是我们所说的后入先出(LIFO). 对栈主要有入栈p ...

  3. javascript 数据结构和算法读书笔记 > 第二章 数组

    这章主要讲解了数组的工作原理和其适用场景. 定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量. javascript数组的特殊之处: jav ...

  4. javascript 数据结构和算法读书笔记 > 第一章 javascript的编程环境和模型

    1.变量的声明和初始化 必须使用关键字 var,后跟变量名,后面还可以跟一个赋值表达式. var name; var age = 5; var str = 'hello'; var flg = fal ...

  5. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

  6. 《Javascript高级程序设计》读书笔记(1-3章)

    第一章 JavaScript简介 1.1 JavaScript简史 略 1.2 JavaScript实现 虽然 JavaScript 和 ECMAScript 通常都被人们用来表达相同的含义,但 Ja ...

  7. 《Linux内核设计与实现》读书笔记 第三章 进程管理

    第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...

  8. 《CSS3实战》读书笔记 第三章:选择器:样式实现的标记

    第三章:选择器:样式实现的标记 选择器的魔力在于,让你完全实现对网页样式的掌控.不同的选择器可以用在不同的情况下使用.总之把握的原则是:规范的编码,根据合理地使用选择器,比去背选择器的定义有价值的多. ...

  9. 《linux内核设计与实现》读书笔记第三章

    第3章 进程管理 3.1 进程 1.进程 进程就是处于执行期的程序. 进程包括: 可执行程序代码 打开的文件 挂起的信号 内核内部数据 处理器状态 一个或多个具有内存映射的内存地址空间 一个或多个执行 ...

随机推荐

  1. DECLARE CONTINUE HANDLER FOR NOT FOUND

    1.解释: 在mysql的存储过程中经常会看到这句话:DECLARE CONTINUE HANDLER FOR NOT FOUND. 它的含义是:若没有数据返回,程序继续,并将变量IS_FOUND设为 ...

  2. 【Android类型SDK测试(一)】认识Android类型的 SDK

    (一)SDK是个什么东东 接触软件相关行业的同学都应该知道,SDK(即 Software Development Kit),软件开发包.其作用就是为开发某些软件提供一些便利的东西,包括工具 集合,文档 ...

  3. 在Windows XP下手动安装Apache+MySQL+PHP环境 要点

    在整个wamp环境搭建中,本质的工作如下: 1,配置系统对php中dll文件能默认处于调用状态.在windos下,对dll文件系统默认处于调用状态的,有两种采用的方式.第一种是:把需要调用dll文件复 ...

  4. HeadFirst设计模式读书笔记(3)-装饰者模式(Decorator Pattern)

    装饰者模式:动态地将责任附件到对象上.若要扩展功能,装饰者提东了比继承更有弹性的替代方案. 装饰者和被装饰对象有相同的超类型 你可以用一个或者多个装饰者包装一个对象. 既然装饰者和被装饰对象有相同的超 ...

  5. :gAudit

    http://www.doc88.com/p-0794369847693.html http://baike.baidu.com/link?url=pcOUfBpILuEAPFrBSsSU-6Vzg3 ...

  6. 如何实现Linux下的U盘(USB Mass Storage)驱动

    如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write Linux USB MSC (Mass Storage Class) Driver Cri ...

  7. android 自定义AlertDialog(一段)

    java: final AlertDialog dialog = new AlertDialog.Builder(mContext) .create(); dialog.setCancelable(f ...

  8. jquery $ dollar符号用法总结

    参考:https://github.com/chyingp/blog/blob/master/jquery/jQuery%E6%BA%90%E7%A0%81-%E7%BE%8E%E5%85%83$%E ...

  9. redhat 6.3 64位安装中文输入法全过程记录

    首先,修改/etc/profile文件,在末尾增加两行: export LC_ALL="zh_CN.UTF-8" export LANG="zh_CN.UTF-8&quo ...

  10. sa命令从/var/account/pacct原始记账数据文件读取信息并汇总

    sa命令从/var/account/pacct原始记账数据文件读取信息并汇总