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数据结构——树
树:非顺序数据结构,对于存储需要快速查找的数据非常有用. 二叉树:二叉树中的节点最多只能有两个子节点(左侧子节点和右侧子节点).这些定义有助于我们写出更高效的向/从树中插入.查找和删除节点的算法. 二 ...
随机推荐
- Hbase和传统数据库的区别
在说HBase之前,我想再唠叨几句.做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到底有多少,说不定今天你的用户还少,明天系统用户就变多了, ...
- Python学习-13.Python的输入输出(二)
在Python中,读取文件使用open函数 file=open(r'E:\temp\test.txt','r') var = file.read() print(var) file.close() 第 ...
- nginx 用户登录认证
1.配置nginx server { listen ; server_name kibana.×××.com; location / { auth_basic "secret"; ...
- 配置ssh使用socks代理
ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' username@server
- VS中C#连接SQLite数据库处理器架构“x86”不匹配的问题
原文链接 https://www.cnblogs.com/zhaoliankun/p/9088200.html 我的环境配置:windows 64,VS,SQLite(点击下载),System.Dat ...
- EasyUi控件Datagrid
很久没有打开我的博客园,刚刚大概扫了一眼我之前写的笔记,关于Devexpress那篇居然有四千多的浏览记录,不知道对浏览过的博友有没有起到一点点作用.当然我写笔记仅仅只是给自己留个记忆,如果歪打正着帮 ...
- java学习笔记—国际化(41)
国际化:internationalization即I18N. 举例: 本科高校的网站,一般的都有中文和英文两种页面风格.因此将这种根据不同用户群体显示不同的页面风格的方式称之为页面的国际化. 翻译 V ...
- item pipeline 实例:爬取360摄像图片
生成项目 scrapy startproject image360 cd Image360 && scrapy genspider images images.so.com 一. 构 ...
- django model改变后,同步数据库
在使用django进行开发时,往往需要根据不同的需求对model进行更改.而这时候,python manage.py syncdb就不好使了. 目前有个很好的工具,是south,这个是专门用来更改mo ...
- 利用python 学习数据分析 (学习三)
内容学习自: Python for Data Analysis, 2nd Edition 就是这本 纯英文学的很累,对不对取决于百度翻译了 前情提要: 各种方法贴: https://w ...