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())); }
javascript 数据结构和算法读书笔记 > 第三章 列表的更多相关文章
- javascript 数据结构和算法读书笔记 > 第五章 队列
队列是一种列表,但是它只能够在队尾插入元素,在队首删除元素.队列用于存储按照顺序排列的数据,先进先出.而栈则是后入栈的元素反而被优先处理. 实际中一般被应用在进程池.排队操作上面. 1. 队列的操作 ...
- javascript 数据结构和算法读书笔记 > 第四章 栈
1. 对栈的操作 栈是一种特殊的列表,栈中的元素只能通过列表的一端进行访问,即栈顶.类似于累起一摞的盘子,只能最后被放在上面的,最先能被访问到. 就是我们所说的后入先出(LIFO). 对栈主要有入栈p ...
- javascript 数据结构和算法读书笔记 > 第二章 数组
这章主要讲解了数组的工作原理和其适用场景. 定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量. javascript数组的特殊之处: jav ...
- javascript 数据结构和算法读书笔记 > 第一章 javascript的编程环境和模型
1.变量的声明和初始化 必须使用关键字 var,后跟变量名,后面还可以跟一个赋值表达式. var name; var age = 5; var str = 'hello'; var flg = fal ...
- 《Linux内核设计与分析》第六周读书笔记——第三章
<Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...
- 《Javascript高级程序设计》读书笔记(1-3章)
第一章 JavaScript简介 1.1 JavaScript简史 略 1.2 JavaScript实现 虽然 JavaScript 和 ECMAScript 通常都被人们用来表达相同的含义,但 Ja ...
- 《Linux内核设计与实现》读书笔记 第三章 进程管理
第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...
- 《CSS3实战》读书笔记 第三章:选择器:样式实现的标记
第三章:选择器:样式实现的标记 选择器的魔力在于,让你完全实现对网页样式的掌控.不同的选择器可以用在不同的情况下使用.总之把握的原则是:规范的编码,根据合理地使用选择器,比去背选择器的定义有价值的多. ...
- 《linux内核设计与实现》读书笔记第三章
第3章 进程管理 3.1 进程 1.进程 进程就是处于执行期的程序. 进程包括: 可执行程序代码 打开的文件 挂起的信号 内核内部数据 处理器状态 一个或多个具有内存映射的内存地址空间 一个或多个执行 ...
随机推荐
- 代码初始化 故事板初始化 xib初始化总结
对象的初始化有三种方式 // 代码创建 - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { ...
- hiho 分冶专题
hiho的每周一题都不会很难,基本上就是一些很裸和经典的问题,这一次写了几道分冶专题的题,做个总结. 分冶最简单的就是二分,二分说简单,很简单,不过7,8行代码,不过也常常写挂,写成无限循环. 直接看 ...
- Ubuntu中nfs服务器安装与配置
一.执行命令 sudo apt-get install nfs-kernel-server 二.为创建nfs文件夹 sudo mkdir /usr/nfs 更改目录权限:sudo chmod 777 ...
- 从汇编看c++的虚拟继承以及其内存布局(一)
先看第一种最简单的情形,所有类中没有任何虚函数的菱形继承. 下面是c++源码: class Top {//虚基类 public: int i; Top(int ii) { i = ii; } }; c ...
- AngularJS中serivce,factory,provider的区别
一.service引导 刚开始学习Angular的时候,经常被误解和被初学者问到的组件是 service(), factory(), 和 provide()这几个方法之间的差别.This is whe ...
- Windows上Python3.5安装Scrapy(lxml)
常用网址: Python 3.5: https://www.python.org/downloads/ Wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlib ...
- PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别
一.echoecho() 实际上不是一个函数,是php语句,因此您无需对其使用括号.不过,如果您希望向 echo() 传递一个以上的参数,那么使用括号会发生解析错误.而且echo是返回void的,并不 ...
- fragment低版本
http://bbs.csdn.net/topics/390271980 Fragment框架开发东西确实很方便,但是恼人的是从4.0才开始支持.以前的版本必须用兼容模式开发,本人在网上找了大量资料, ...
- Qt中如何 编写插件 加载插件 卸载插件
Qt中如何 编写插件 加载插件 卸载插件是本文要介绍的内容.Qt提供了一个类QPluginLoader来加载静态库和动态库,在Qt中,Qt把动态库和静态库都看成是一个插件,使用QPluginLoade ...
- Starling开发微信打灰机(二)
上一篇中,已经把starling开发环境搭建好,那么现在开始写代码. 这一篇来完成打灰机的欢迎界面. 游戏素材下载 首先创建Asset.as来加载图片,声音和字体等资源,其中只有两张背景图是单独的图片 ...