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数据结构——树
树:非顺序数据结构,对于存储需要快速查找的数据非常有用. 二叉树:二叉树中的节点最多只能有两个子节点(左侧子节点和右侧子节点).这些定义有助于我们写出更高效的向/从树中插入.查找和删除节点的算法. 二 ...
随机推荐
- 工作中经常打交道的Java代码の容器(一)
- centos 虚拟机中修改屏幕分辨率
1.$ vi /boot/grub/grub.conf(路径可能会不一样,也可以是 /etc/grub.conf),打开grub.conf文件 2.我们修改分辨率,需要在kernel那行加入 vga= ...
- [node.js]express+mongoose+mongodb的开发笔记
时间过得很快,6月和7月忙的不可开交,糟心的事儿也是不少,杭州大连来回飞,也是呵呵. 希望下个阶段能沉浸下来,接着学自己想学的.记一下上几周用了几天时间写的课设.因为课设的缘故,所以在短时间里了解下e ...
- 用.msi安装node时安装失败,出现rolling back action(转载)
转载地址:https://blog.csdn.net/qq_33295622/article/details/52956369在重装node时出现了上图所示情况,解决方法如下: 1.在官网下载稳定版本 ...
- UWP多线程枚举安全的List
最近在做windows runtime下APP开发的工作.在Service层请求返回后,往往会通过回调的形式来通知UI更新数据.多个线程操作经常出现foreach抛出异常:System.Invalid ...
- CF834D The Bakery
题目链接:戳我 题意:将一个长度为n的序列分为k段,使得总价值最大.一段区间的价值表示为区间内不同数字的个数 \(n<=35000,k<=50\) 开始想的转移方程是这个样子的--\(dp ...
- Kubernetes 集群安装部署
etcd集群配置 master节点配置 1.安装kubernetes etcd [root@k8s ~]# yum -y install kubernetes-master etcd 2.配置 etc ...
- ansible 之条件语句 when
注册变量: 变量的另一个用途是将一条命令的运行结果保存到变量中,供后面的playbook使用.例如: - hosts: webservers tasks: - shell: /usr/bin/foo ...
- Python 魔法方法查询表 -- 总结篇
据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...
- 版本控制(.git + .svn)
git 分布式版本控制系统 底层C语言 按元数据方式存储,采用SHA-1哈希算法(内容完整性好) 结合GitHub,为开源项目免费提供Git存储 git config --global user.na ...