JavaScript数据结构-3.List
<!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的更多相关文章
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- 学习javascript数据结构(一)——栈和队列
前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...
- javascript数据结构与算法-- 二叉树
javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...
- javascript数据结构与算法--散列
一:javascript数据结构与算法--散列 一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...
- javascript数据结构与算法---队列
javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...
- javascript数据结构与算法---栈
javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...
- javascript数据结构与算法---列表
javascript数据结构与算法---列表 前言:在日常生活中,人们经常要使用列表,比如我们有时候要去购物时,为了购物时东西要买全,我们可以在去之前,列下要买的东西,这就要用的列表了,或者我们小时候 ...
- JavaScript数据结构——树
树:非顺序数据结构,对于存储需要快速查找的数据非常有用. 二叉树:二叉树中的节点最多只能有两个子节点(左侧子节点和右侧子节点).这些定义有助于我们写出更高效的向/从树中插入.查找和删除节点的算法. 二 ...
随机推荐
- ZOJ3712:Hard to Play
MightyHorse is playing a music game called osu!. After playing for several months, MightyHorse disco ...
- Spring 之 AOP
面向方面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化.AOP 的核心构造是方面, 它将那些影响多个类的行为封装到可重用的模块 ...
- eclipse 高效快捷键大全
一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. 1. ctrl+shift+r:打开资源 这可能 ...
- ASP.NET系列:自定义配置节点的复用
appSettings太简单,为每个程序自定义配置节点太复杂,因此要解决app.config&web.config自定义配置的复用问题. 1.读取不依赖SectionName,根节点可以定义为 ...
- Win 8下Rime输入法无法同步的临时解决方法
意外发现了Rime输入法(OS X上叫鼠须管'Squirrel',windows上叫小狼毫'Weasel',linux上叫中州韵'ibus-rime',连名字都起的这么牛逼),真是神器啊,流畅的速度, ...
- 字体变色详解链接:https://www.cnblogs.com/daofaziran/p/9015284.html
格式:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m 字体色 | 背景色 | 颜色描述 ------------------------------------------- 30 ...
- C#多线程编程系列(一)- 简介
目录 系列大纲 一.前言 二.目录结构 四.章节结构 五.相关链接 系列大纲 目前只整理到第二章,线程同步,笔者后面会慢慢更新,争取能把这本书中精华的知识都分享出来. C#多线程编程系列(一)- 简介 ...
- Linux 服务器上安装Webmin
1.登陆到服务器 2.新建一个文件夹来保存webmin,建议在个人用户下新建., 3.下载Webmin的安装文件, 命令是: wget http://prdownloads.sourceforge.n ...
- java学习笔记—标准连接池的实现(27)
javax.sql.DataSource. Java.sql.* DataSource 接口由驱动程序供应商实现.共有三种类型的实现: 基本实现 - 生成标准的 Connection 对象 – 一个D ...
- E - More is better (并查集)
点击打开链接 Mr Wang wants some boys to help him with a project. Because the project is rather complex, th ...