javascript数据结构与算法---列表javascript
前言:在平常生活中,人们常常要使用列表,好比咱们有时候要去购物时,为了购物时东西要买全,咱们能够在去以前,列下要买的东西,这就要用的列表了,或者咱们小时候上学那段时间,每次考完试后,学校都会列出此次考试成绩前十名的同窗的排名及成绩单,等等这些都是列表的列子。咱们计算机内也在使用列表,那么列表适合使用在什么地方呢?不适合使用在什么地方呢?java
适合使用在:当列表的元素不是不少的状况下,能够使用列表,由于对列表中的元素查找或者排序时,效率还算很是高,反之:若是列表元素很是多的状况下,就不适合使用列表了。算法
一:列表的抽象数据类型定义数组
为了设计列表的抽象数据类型,咱们须要给出列表的定义,包括列表应该拥有哪些属性,应该在列表上执行哪些操做等。数据结构
列表是一组有序的数据。每一个列表中的数据项称为元素。在javascript中,列表中的元素能够是任意数据类型。列表中能够保存多少元素并无事先约定。可是实际使用时元素数量受到程序内存的限制。app
如今咱们想设计一个列表,那么咱们能够想一想实现一个列表,他们应该包含哪些属性和方法,固然我下面的设计都是根据 "javascript数据结构与算法" 书上的demo来设计的,为止咱们能够学习下,若是之后咱们编写程序时,该如何来设计咱们本身的抽象类来做为一个参考,咱们如今学习书上的demo最主要的是学习他们中的设计思想及编写代码的方式。他们有以下属性;函数
1. listSize(属性):使用一个listSize变量来保存列表中元素的个数。学习
2. pos(属性): 列表的当前位置,元素的索引。this
3. dataStore(属性): 初始化一个空数组来保存元素的个数。若是咱们想取得具体的列表中的元素 能够使用上面的pos属性;如 dataStore[pos];编码
全部的方法;以下列表解释,不一一介绍了。
二:如何实现列表类。
根据上面定义的列表抽象数据类型,咱们能够实现以下一个List类,以下经过构造函数+原型模式。
function List() { // 列表的元素个数
this.listSize = 0; // 列表的当前位置 是第几个
this.pos = 0; // 初始化一个空数组来保存列表元素
this.dataStore = []; } List.prototype = { // 给列表末尾添加元素
append: function(element) { var self = this; self.dataStore[this.listSize++] = element; }, // 从列表中删除元素
remove: function(element) { var self = this; var curIndex = self.find(element); if(curIndex > -1) { self.dataStore.splice(curIndex,1); --self.listSize; return true; } return false; }, // 查找列表中的元素 返回索引
find: function(element) { var self = this; for(var i = 0,dataLen = self.dataStore.length; i < dataLen; i++) { if(self.dataStore[i] == element) { return i; } } return -1; }, // 返回列表中元素的个数
length: function() { return this.listSize; }, // 显示列表中的元素
toString: function(){ return this.dataStore; }, /* * 在指定元素后面插入一个元素 * @param element 当前的元素 * @param elementAfter 把当前的元素插入到此元素后面 */ insert: function(element,elementAfter){ var self = this; var insertPos = self.find(elementAfter); if(insertPos > -1) { self.dataStore.splice(insertPos+1,0,element); ++self.listSize; return true; } return false; }, // 清空列表中的全部元素
clear: function() { delete this.dataStore; this.dataStore = []; this.listSize = this.pos = 0; }, // 判断给定的元素是否在列表中
contains: function(element) { var self = this; for(var i = 0,ilen = self.dataStore.length; i < ilen; i++) { if(self.dataStore[i] == element) { return true; } } return false; }, // 将列表中的当前元素移动到第一个位置
front: function(){ this.pos = 0; }, // 将列表中当前的元素移动到最后一个位置
end: function(){ this.pos = this.listSize - 1; }, // 将当前位置 后移一位
prev: function(){ if(this.pos > 0) { --this.pos; } }, // 将当前位置 前移一位
next: function(){ if(this.pos < this.listSize - 1) { ++this.pos; } }, // 返回列表的当前位置
curPos: function(){ return this.pos; }, // 将当前位置移动到指定位置
moveTo: function(n) { this.pos = n; }, // 返回当前位置的元素
getElement:function(){ return this.dataStore[this.pos]; } };
如上:实现一个列表类,包含上面的如上那么多方法,固然咱们也能够扩展一些其余的方法,来丰富实现列表类,最主要能够学习如上编码方式。