<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>List实现</title>
</head>
<body>
<script>
/*列表的抽象数据类型定义:
listSize 属性 列表中元素个数
pos 属性 列表的当前位置
length 属性 返回列表中元素的个数
clear 方法 清空列表中的所有元素
toString 方法 返回列表的字符串形式
getElement方法 返回当前位置的元素
insert 方法 在现有元素后插入新的元素
append 方法 在列表的末尾添加新元素
remove 方法 从列表中删除元素
front 方法 将列表的当前位置移动到第一元素
end 方法 将列表的当前位置移动到最后一个元素
prev 方法 将当前位置上移一位
next 方法 将当前位置下移一位
currPos 方法 返回列表当前位置
moveTo 方法 将当前位置移动到指定位置
*/ //实现列表类
function List(){
this.listSize = 0;
this.pos = 0;
this.arr = [];
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.currPos = currPos;
this.moveTo = moveTo;
this.getElement = getElement;
this.length = length;
this.contans = contains;
} //append方法
function append(ele){
this.arr[this.listSize++] = ele;
} //查找元素的位置
function find(ele){
for(var i=0;i<this.arr.length;i++){
if(this.arr[i] == ele){
return i
}
}
return -1;
} //删除元素
function remove(ele){
var index = this.find(ele);
if(index >-1){
this.arr.splice(index,1);
this.listSize--;
return true
}
return false
} //列表长度
function length(){
return this.listSize;
} //显示列表中的元素
function toString(){
return this.arr;
} var obj = new List();
obj.append("zhangsan");
obj.append("lisi");
obj.append("zhaowu");
console.log(obj.toString());
console.log(obj.length());
obj.remove("lisi");
console.log(obj.toString()); //插入元素
function insert(ele,after){
var insertPos = this.find(after);
if(insertPos > -1){
this.arr.splice(insertPos+1,0,ele);
this.listSize++;
return true;
}
return false;
} //清空元素
function clear(){
delete this.arr;
this.arr = [];
this.listSize = this.pos = 0;
} //给定值是否在列表中
function contains(ele){
for(var i=0;i<this.arr.length;i++){
if(this.arr[i] == ele){
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.arr[this.pos];
} var names = new List();
names.append("zhangsan");
names.append("lisi");
names.append("wangwu");
names.append("zhaoliu"); names.front();
console.log(names.getElement());
names.next();
console.log(names.getElement());
names.prev();
console.log(names.getElement()); // 使用迭代器访问列表
for(names.front();names.currPos()<=names.length();names.next()){
console.log(names.getElement(),"正序"); //由于prev()和 next() 做了判断,为避免死循环,这里也要做判断 下面也一样
if(names.currPos() == names.length()-1) break;
} for(names.end();names.currPos() >=0;names.prev()){
console.log(names.getElement(),"反序");
if(names.currPos() == 0) break;
} </script>
</body>
</html>

JavaScript数据结构-3.List的更多相关文章

  1. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

  2. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  3. 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...

  4. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

  5. javascript数据结构与算法-- 二叉树

    javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...

  6. javascript数据结构与算法--散列

    一:javascript数据结构与算法--散列  一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...

  7. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

  8. javascript数据结构与算法---栈

    javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...

  9. javascript数据结构与算法---列表

    javascript数据结构与算法---列表 前言:在日常生活中,人们经常要使用列表,比如我们有时候要去购物时,为了购物时东西要买全,我们可以在去之前,列下要买的东西,这就要用的列表了,或者我们小时候 ...

  10. JavaScript数据结构——树

    树:非顺序数据结构,对于存储需要快速查找的数据非常有用. 二叉树:二叉树中的节点最多只能有两个子节点(左侧子节点和右侧子节点).这些定义有助于我们写出更高效的向/从树中插入.查找和删除节点的算法. 二 ...

随机推荐

  1. Ubuntu的常识使用了解3

    打包与压缩

  2. [label][JavaScript][The Defined Guide of JavaScript] 变量的作用域

    变量的作用域 一个变量的作用域(scope)是程序中定义这个变量的区域. 全局(global)变量的作用域(scope)是全局性的,即在JavaScript代码中,它处处都有定义.    而在函数之内 ...

  3. 在没Hadoop 、GP 前提下怎么进行实时数据统计。

    最近着手个项目,整体数据量有5亿多,每个月增量9000w.应用场景是Oltp 根据用户id直接计算各种维度值. 因为是Oltp 场景,直接根据用户id %2000分(方便后续横向扩展),有些喜欢扯分区 ...

  4. CDI(Weld)高级<4> Event(事件) (转)

    目录[-] 1. Event payload(事件的有效载入) 2. Event observers(event的观察者) 3. Event producers(event生产者) 4.Annotat ...

  5. HighCharts使用总结

    1.常用属性 chart: type:areaspline(线面图).arearange(区间图) zoomType: 缩放类型(沿着'xy'轴缩放) alignTicks:设置坐标轴刻度对齐. 当有 ...

  6. Visual Studio 2013的新特性介绍

    cnbeta新闻:微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Ser ...

  7. iOS Facebook SDK

    iOS 使用 Facebook SDK 可以登录,分享,发布通知(Notifications)等. 首先下载 Facebook SDK.然后在 Facebook Developer 上注册自己的 ap ...

  8. Android性能测试-内存

    前言: 近阶段都在探索android性能测试方面的东西,其中一个很重要的指标就是内存.对于内存,主要是一些gc是不是及时,或者说一些引用有没有及时释放,有没有导致oom或者内存持续增加导致卡顿,有没有 ...

  9. Linux 服务器上安装Webmin

    1.登陆到服务器 2.新建一个文件夹来保存webmin,建议在个人用户下新建., 3.下载Webmin的安装文件, 命令是: wget http://prdownloads.sourceforge.n ...

  10. Linux 重命名

    例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 其实在文本模式中要重命名文件或目录,只需要使用mv命令就可以了,比如说要将一个名为abc的文件 ...