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

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

     前言:在平常生活中,人们常常要使用列表,好比咱们有时候要去购物时,为了购物时东西要买全,咱们能够在去以前,列下要买的东西,这就要用的列表了,或者咱们小时候上学那段时间,每次考完试后,学校都会列出此次考试成绩前十名的同窗的排名及成绩单,等等这些都是列表的列子。咱们计算机内也在使用列表,那么列表适合使用在什么地方呢?不适合使用在什么地方呢?java

适合使用在:当列表的元素不是不少的状况下,能够使用列表,由于对列表中的元素查找或者排序时,效率还算很是高,反之:若是列表元素很是多的状况下,就不适合使用列表了。算法

一:列表的抽象数据类型定义数组

      为了设计列表的抽象数据类型,咱们须要给出列表的定义,包括列表应该拥有哪些属性,应该在列表上执行哪些操做等。数据结构

列表是一组有序的数据。每一个列表中的数据项称为元素。在javascript中,列表中的元素能够是任意数据类型。列表中能够保存多少元素并无事先约定。可是实际使用时元素数量受到程序内存的限制。app

     如今咱们想设计一个列表,那么咱们能够想一想实现一个列表,他们应该包含哪些属性和方法,固然我下面的设计都是根据 "javascript数据结构与算法" 书上的demo来设计的,为止咱们能够学习下,若是之后咱们编写程序时,该如何来设计咱们本身的抽象类来做为一个参考,咱们如今学习书上的demo最主要的是学习他们中的设计思想及编写代码的方式。他们有以下属性;函数

 1. listSize(属性):使用一个listSize变量来保存列表中元素的个数。学习

 2. pos(属性):  列表的当前位置,元素的索引。this

 3. dataStore(属性): 初始化一个空数组来保存元素的个数。若是咱们想取得具体的列表中的元素 能够使用上面的pos属性;如 dataStore[pos];编码

 全部的方法;以下列表解释,不一一介绍了。

 listSize(属性)  列表的元素个数
 pos(属性)  列表的当前位置 是第几个
 dataStore(属性)  初始化一个空数组来保存列表元素
 append(方法)  给列表末尾添加元素
 remove(方法)  从列表中删除元素
 find(方法)  查找列表中的元素 返回索引
 length(方法)  返回列表中元素的个数
 toString(方法)  显示列表中的元素
 insert(方法)  在指定元素后面插入一个元素
 clear(方法)  清空列表中的全部元素
 contains(方法)  判断给定的元素是否在列表中
 front(方法)  将列表中的当前元素移动到第一个位置
 end(方法)  将列表中当前的元素移动到最后一个位置
 prev(方法)  将当前位置 后移一位
 next(方法)  将当前位置 前移一位
 curPos(方法)  返回列表的当前位置
 moveTo(方法)  将当前位置移动到指定位置
 getElement(方法)  返回当前位置的元素

二:如何实现列表类。

根据上面定义的列表抽象数据类型,咱们能够实现以下一个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]; } };

如上:实现一个列表类,包含上面的如上那么多方法,固然咱们也能够扩展一些其余的方法,来丰富实现列表类,最主要能够学习如上编码方式。

相关文章
相关标签/搜索