实现一个列表
script
var booklist = new List();
booklist.append('jsbook');
booklist.append('cssbook');
booklist.append('htmlbook');
console.log(booklist.length()) //3
console.log(booklist.toString()) //["jsbook", "cssbook", "htmlbook"]
TODO
这个列表又很多不完善的地方,比如
booklist.append(['cbook','c++book']) // 这样的就没合理的处理掉 ,以及去重判断等。
代码如下:
/**
* 列表的实现, 数据结构与算法JavaScript描述 第三章
* @constructor
*/
function List(){
this.listSize = 0;
this.pos = 0;
this.dataStore = []; //初始化一个空数组来保存列表元素
this.clear = clear;
this.find = find;
this.toString = toString;
this.insert = insert;
this.append = append;
this.remove = remove;
this.front = front;
this.end = end;
this.prev = prev;
this.next = next;
this.length = length;
this.currPos = currPos;
this.moveTo = moveTo;
this.getElement = getElement;
this.contains = contains;
//清空列表
function clear(){
delete this.dataStore;
this.dataStore.length = 0;
this.listSize = this.pos = 0;
}
//查找元素位置
function find(element){
for (var i = 0; i < this.dataStore.length; ++i) {
if (this.dataStore[i] == element) {
return i;
}
}
return -1;
}
//某元素之前插入元素
function insert(element,after){
var p = this.find(after)
if(p>-1){
this.dataStore.splice(p+1,0,element)
++this.listSize;
return true;
}
return false;
}
//插入元素
function append(element){
this.dataStore[this.listSize++] = element;
}
//移除元素
function remove(element){
var f = this.find(element)
if(f>-1){
this.dataStore.splice(f,1)
this.listSize--;
return true;
}
return false;
}
//把位置挪到最前面
function front(){
this.pos = 0;
}
//把位置挪到坐后面
function end(){
this.pos = (this.listSize-1)
}
//把位置上移一个节点
function prev(){
if (this.pos > 0) {
--this.pos;
}
}
//把位置下移一个节点
function next(){
if (this.pos < this.listSize-1) {
++this.pos;
}
}
//返回当前位置
function currPos(){
return this.pos;
}
//移到某一个位置
function moveTo(position){
this.pos = position;
}
//获得当前位置的元素
function getElement(){
return this.dataStore[this.pos]
}
//查找当前元素 是否在列表中
function contains(element){
for(var i=0;i<this.dataStore.length;i++){
if(this.dataStore[i]==element){
return true;
}
}
return false;
}
//tostring
function toString() {
return this.dataStore;
}
//返回该列表的长度
function length(){
return this.listSize;
}
}
列表的实现-----数据结构与算法JavaScript描述 第三章的更多相关文章
-
读书笔记《数据结构与算法JavaScript描述》第一章
第一章JavaScript的编程环境和模型 1.2JavaScript编程实践 1.2.1 声明和初始化变量 JavaScript中的变量默认为全局变量,如果初始化未被声明的变量,该变量就成了一个全局 ...
-
《数据结构与算法JavaScript描述》
<数据结构与算法JavaScript描述> 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9 ...
-
翻阅《数据结构与算法javascript描述》--数组篇
导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性 ...
-
数据结构与算法javascript描述
<数据结构与算法javascript描述>--数组篇 导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScri ...
-
《数据结构与算法JavaScript描述》中的一处错误
最近在看<数据结构与算法JavaScript描述>这本书,看到选择排序这部分时,发现一个比较大的错误. 原书的选择排序算法是这样的: function selectionSort() { ...
-
数据结构与算法 Javascript描述
数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得
-
读后感:数据结构与算法JavaScript描述
本书看完,对常见的数据结构与算法从概念上有了更深入的理解. 书中关于数组.栈和队列.链表.字典.散列.集合.二叉树.图.排序.检索.动态规划.贪心算法都有详细的介绍.算是一本不错的学习书籍. 栈和队列 ...
-
数据结构与算法JavaScript描述——列表
1.列表的抽象数据类型定义 2.实现列表类: 2.1 append:给列表添加元素: 2.2 remove: 从列表中删除元素: 2.3 find方法: 2.4 length:列表中有多少个元素: ...
-
数据结构与算法JavaScript描述——使用队列
1.使用队列:方块舞的舞伴分配问题 前面我们提到过,经常用队列模拟排队的人.下面我们使用队列来模拟跳方块舞的人.当 男男女女来到舞池,他们按照自己的性别排成两队.当舞池中有地方空出来时,选两个队 列中 ...
随机推荐
-
Clion cmake 一个简单的 C++ 程序
CMakeLists.txt cmake_minimum_required(VERSION 3.5) project(dll) set(CMAKE_CXX_FLAGS "${CMAKE_CX ...
-
linux笔记:linux帮助命令,man,help,whatis,apropos
命令名称:man功能:获得帮助信息命令所在路径:/usr/bin/man用法:man 命令或配置文件其他:会调用less来查看该命令或配置文件的帮助信息. 命令名称:whatis功能:获得命令的简短介 ...
-
配置FTP服务
配置FTP服务 1.安装FTP服务器(默认已安装) 服 务:vsftpd 位 置:光盘1 软 件:vftpd-2.0.1-5.i386.rpm 配 置:/etc/vsftpd/vsftpd.conf ...
-
tc-SRM-626-DIV1-250
枚举alice投掷骰子得到的结果的每一种情况极其数量. 枚举bob投掷骰子得到的结果的每一种情况极其数量. 然后枚举alice投掷骰子得到的结果的数量和bob投掷骰子比alice低的数量. 然后计算结 ...
-
Shell 基础
1.结构 #!指定执行脚本的shell #!/bin/sh # 注释行 命令和控制结构 2.修改权限 chmod +x ... 3 ...
-
java(11)带参数的方法
一.java中的包(package) 1.1 包,对应到磁盘中的文件夹 1.2 新建一个class,默认保存在缺省包中 1.3 声明包的关键字:package package语句,置顶位置 1.4 导 ...
-
[转]PuTTY字体颜色设置
转载于 https://blog.csdn.net/cyd_shuihan/article/details/77836290 用putty登录Linux,默认配色方案看不清,我们可以自己设置新的字体大 ...
-
用es6方式的写的订阅发布的模式
//发布订阅模式 class EventEmiter { constructor() { //维护一个对象 this._events = { } } on(eventName, callback) { ...
-
RecyclerAdapter封装
import java.util.LinkedList; import java.util.List; import android.content.Context; import android.s ...
-
json-lib.jar开发包及依赖包的下载地址(转)
一.去官方下载json-lib工具包下载地址:http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/目前最新的是2. ...