3.1 列表的抽象数据类型定义
列表:一组有序的数据。每个列表中的数据称为元素。在JavaScript中列表的元素可以是任意的数据类型。列表中保存的元素没有事先的限定,实际使用时的元素数量受到程序内存的限制。
属性:
listSize: 列表的元素个数
pos: 列表的当前位置
length: 返回列表中元素的个数
方法:
clear(): 清空列S表中的所有元素
toString(): 返回列表的字符串形式
getElement(): 返回当前位置的元素
insert(): 现有元素后插入新元素
append(): 在列表的末尾添加一个元素
remove(): 从列表中移除元素
front(): 从列表的当前位置移动到第一个位置
end(): 从列表的当前位置移动到最后一个位置
prev(): 当前位置后移一位
next(): 当前位置前移一位
currPos(): 返回列表的当前位置
moveTo(): 将当前位置移动到指定位置

创建List列表,及扩展属性方法:

 function List() {
  this.listSize = 0;
  this.pos = 0;
  this.dataStore = [];
  //面向对象方法不在初始化中,这里只初始化属性
  //this.clear = clear;
  //this.toString = toString;
  //this.insert = insert;
  //this.append = append;
  //this.remove = remove;
  //this.front = front;
  //this.end = end;
  //this.prev = prev;
  //this.currPos = currPos;
  //this.moveTo = moveTo;
  //this.length = length;
}
//append()方法在列表的末尾插入一个元素:
List.prototype.append = function(element) {
  this.dataStore[this.listSize++] = element;
}
//插入的元素赋值给dataStore,同时改变对应的下标; //find()找到列表中所对应的元素:通过遍历dataStore中的元素,匹配元素是否相等,如果是返回对应的下标,如果不是返回-1;
List.prototype.find = function(element) {
  for(var i = 0; i < dataStore.length; i++) {
    if(this.dataStore[i] == element) {
      return i;
    }
  }
  return -1;
} //remove()移除列表中的元素:
//首先通过find()方法把所要删除的元素找到,如果存在所要删除的元素,利用数组splice();方法删除,同时listSize列表元素个数减一,删除成功返回true;失败返回false;
List.prototype.remove = function(element) {
  var findElement = this.find(element);
  if( findElement > -1) {
    this.dataStore.splice(findElement,1);
    this.listSize--;
    return true;
  }
  return false;
} //length: 列表length,返回元素的个数
List.prototype.length = function() {
  return this.listSize;
} //toString()显示列表中的元素
List.prototype.toString = function() {
  return this.dataStore;
} //insert()项列表中插入一个元素:
//接受两个参数,一个是插入的元素,一个是插入的位置。该方法使用find()方法找到对应的元素,通过判断该元素是否存在,如果不存在在进行插入操作,不存在则通过数组的splice()方法进行插入,同时改变list列表的元素个数。成功返回true,失败返回false;
List.prototype.insert = function(element,after) {//插入元素,插入位置(从0开始)
  var insertPos = this.find(after);
  if(insertPos > -1) {
    this.dataStore.splice( insertPos+1,0,element );//pos+1数组下标从0开始
    this.listSize++;
    return true;
  }
  return false;
} //clear()清空列表中的所有元素:
//该方法通过delete删除dataStore数组,重新创建空的新数组,然后把list列表的元素个数,当前位置改为0;
List.prototype.clear = function() {
  delete this.dataStore;
  this.dataStore = [];
  this.listSize = this.pos = 0;
} //contains()判断给定值是否在list列表中
//该方法和find()方法类似,contains方法包含返回true,不包含返回false,find方法查找到该元素,返回该元素的下标,不存在返回-1。
List.prototype.contains = function(element) {
  for(var i = 0; i < this.dataSize.length; i++) {
    if( this.dataStore[i] == element ) {
      return true;
    }
  }  
  return false;
}

JavaScript--数据结构与算法之列表的更多相关文章

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

    javascript数据结构与算法---列表 前言:在日常生活中,人们经常要使用列表,比如我们有时候要去购物时,为了购物时东西要买全,我们可以在去之前,列下要买的东西,这就要用的列表了,或者我们小时候 ...

  2. 为什么我要放弃javaScript数据结构与算法(第七章)—— 字典和散列表

    本章学习使用字典和散列表来存储唯一值(不重复的值)的数据结构. 集合.字典和散列表可以存储不重复的值.在集合中,我们感兴趣的是每个值本身,并把它作为主要元素.而字典和散列表中都是用 [键,值]的形式来 ...

  3. JavaScript数据结构与算法-列表练习

    实现列表类 // 列表类 function List () { this.listSize = 0; // 列表的元素个数 this.pos = 0; // 列表的当前位置 this.dataStor ...

  4. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

  5. javascript数据结构与算法-- 二叉树

    javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...

  6. javascript数据结构与算法--散列

    一:javascript数据结构与算法--散列  一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...

  7. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

  8. javascript数据结构与算法---栈

    javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...

  9. javascript数据结构与算法---检索算法(顺序查找、最大最小值、自组织查询)

    javascript数据结构与算法---检索算法(顺序查找.最大最小值.自组织查询) 一.顺序查找法 /* * 顺序查找法 * * 顺序查找法只要从列表的第一个元素开始循环,然后逐个与要查找的数据进行 ...

  10. 为什么我要放弃javaScript数据结构与算法(第十章)—— 排序和搜索算法

    本章将会学习最常见的排序和搜索算法,如冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序,以及顺序排序和二叉搜索算法. 第十章 排序和搜索算法 排序算法 我们会从一个最慢的开始,接着是一些性能好 ...

随机推荐

  1. Maven的SSH搭建以及部署

    本人有点傻,研究Maven研究了有一段时间,刚刚有些入门,记录下来方便以后使用 工作环境:jdk7 myeclipse10 maven3.1.1 1 下载maven3.1.1 http://maven ...

  2. URAL 1513. Lemon Tale(简单的递推)

    写几组数据就会发现规律了啊. .但是我是竖着看的.. .还找了半天啊... 只是要用高精度来写,水题啊.就当熟悉一下java了啊. num[i] = 2*num[i-1]-num[i-2-k]. 15 ...

  3. [Recompose] Make Reusable React Props Streams with Lenses

    If you hard-code a stream of props to target a specific prop, it becomes impossible to reuse that st ...

  4. Oracle数据库备份恢复,巡检须要关注的对象设置以及相关恢复概述

    数据库备份恢复.巡检须要关注的对象设置: 1.数据库名称,以及DBID:  --dbid在v$database中     SYS@ORCL>select dbid,name from v$dat ...

  5. jquery easyui 输入框 禁止输入负数 设置属性data-options="min:0,required:true"

    jquery easyui  输入框 禁止输入负数  设置属性data-options="min:0,required:true" <input id="days& ...

  6. update-alternatives 命令

    update-alternatives 命令 1.功能作用 update-alternatives是dpkg的实用工具,用来维护系统命令的符号链接,以决定系统默认使用什么命令. 在Debian系统中, ...

  7. ajax处理错误(六)

    使用ajax时必须留心两类错误,他们之间的区别源于视角不同. 一.第一类错误是从XMLHttpRequest对象的角度看到的问题:某些因素阻例如止了请求发送到服务器,例如DNS无法解析主机名,连接请求 ...

  8. Network Stack‎ : HTTP Cache

    HTTP Cache 目录 1 Operation 2 Sparse Entries 3 Truncated Entries 4 Byte-Range Requests 5 HttpCache::Tr ...

  9. javaScript call与apply学习笔记

    call和apply是借用他人的函数实现自己到功能,具体表现在改变this指向,借用他人方法 而不同的地方是call是把实参按照形参的个数传入,而apply传入的是一个数组(argument) 写一个 ...

  10. expr---计算工具

    expr命令是一款表达式计算工具,使用它完成表达式的求值操作. expr的常用运算符: 加法运算:+ 减法运算:- 乘法运算:\* 除法运算:/ 求摸(取余)运算:% 语法 expr(选项)(参数) ...