javascript 数据结构和算法读书笔记 > 第三章 列表

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()));
}

  

时间: 2024-10-20 12:53:55

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

javascript 数据结构和算法读书笔记 &gt; 第四章 栈

1. 对栈的操作 栈是一种特殊的列表,栈中的元素只能通过列表的一端进行访问,即栈顶.类似于累起一摞的盘子,只能最后被放在上面的,最先能被访问到. 就是我们所说的后入先出(LIFO). 对栈主要有入栈push,出栈pop,获得栈顶元素peek, 三个方法. 2. 栈的实现 基本类结构如下: function Stack(){ this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek;

MySQL Cookbook读书笔记第三章

1,查询指定列/从指定列中查询 若需要指定每一列在查询结果中出现的先后顺序,可以在select语句中指定(dstuser在dsthost之后): 查询显示用户所关注的列: 2,指定查询行 使用where关键字可以查询符合条件限制的数据例如:查找srchost为venus或者srchost以s开头的行记录: 使用操作符like进行模式匹配,其中%表示通配符,代表一个差多为任意值的字符串. where使用操作符and可以查询多个条件: 条件并集: 3,格式化显示查询结果 当查询语句中没有重命名列名,

Linux内核设计与实现读书笔记——第三章

Linux内核设计与实现读书笔记——第三章 进程管理 20135111李光豫 3.1进程 1.进程即处于执行期的程序,并不局限于一个可执行的代码,是处于执行期程序以及其相关资源的总称. 2.Linux系统中,对于进程和线程并没有明显的区分,线程是一种特殊的进程. 3.Linux系统中,常用fork()进程创建子进程.调用fork()进程的成之为其子进程的父进程. 4.fork()继承实际上由clone()系统调用实现.最后通过exit()退出执行. 3.2任务描述符及任务结构 1.任务队列实质上

Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

Android群英传神兵利器读书笔记--第三章:Android Studio奇技淫巧 这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 目录 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap Tip of the Day 快速查找 Search Action 演示模式 3.2 Android Studio使用进阶 操作与导航 快速重构 代码模板 内置模板 自定义代码注释模板 代码分析 在Andr

&lt;java并发编程的艺术&gt;读书笔记-第三章java内存模型(一)

一概述 本文属于<java并发编程的艺术>读书笔记系列,继续第三章java内存模型. 二重排序 2.1数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性.数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置. 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量. 读后写 a = b;b = 1; 读一个变量之后,再写这个变量. 上面三种情况,只要重排序两个操作的执行顺序,

《java并发编程的艺术》读书笔记-第三章Java内存模型(二)

一概述 本文属于<java并发编程的艺术>读书笔记系列,第三章java内存模型第二部分. 二final的内存语义 final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.可以参照之前整理的关键字final.这里作者主要介绍final域的内存语义. 对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序. 初次读一个包含final域的对象的引用,与随后初次读这

Python读书笔记-第三章,四章

第三章 1. 字符串格式化 >>>format="hello %s  %s world" >>>values=('world','hot') >>>print format % values  #也可以接收单个字符串也 也可以用%f %d这类的类似与c的printf 匹配多个参数的时候应该用圆括号 >>>'%s plus %s equals %s'  %(1,1,2) >>>'%010.2f' %

读书笔记第三章

第三章linux下的软件有很多都不直接以二进制形式的安装包提供,而是直接提供了源代码,用户需先下载源代码,然后在本机上编译并安装(一般使用make.make install等命令).git是源代码管理软件.git使用步骤:安装git.查看git文档:用man方法就行.源代码的提交与获取:1创建版本库:git init,git的版本库与其他版本管理软件的版本库组织方式有很大差异,git的版本库分为本地版本库和远程版本库.建立项目之初,使用git init在本地常见一个空的版本库.2将文件提交到本地

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

第3章 进程管理 3.1 进程 1.进程 进程就是处于执行期的程序. 进程包括: 可执行程序代码 打开的文件 挂起的信号 内核内部数据 处理器状态 一个或多个具有内存映射的内存地址空间 一个或多个执行线程 用来存放全局变量的数据段 …… 实际上,进程就是正在执行的程序代码的实时结果 2.执行线程 简称线程,是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程,而不是进程. 进程提供两种虚拟机制: 虚拟处理器和虚拟内存. 在线程之间可以共享虚拟