JavaScript数据结构之列表类List

一、前提概要

  在平时的JavaScript程序开发中,经常会使用到列表数据的展示。例如:热度榜单、头条列表、成绩榜单、待办事项等等,以上数据都有一些共同的特点,数据结构简单、数据量不大。那么,基于以上特点,自定义一个列表类,只需要封装一些查询、定位等方法就可以帮助我们去处理这些数据了。当然,一旦,数据结构非常复杂、数据量比较大的时候,列表类的作用就没有那么大了。

二、数据抽象

  1.属性定义:

属性 备注
  dataSource   列表的存储数据源
  size   列表的长度、个数
  position   列表的当前索引位置

  

  2.方法定义:

方法 备注
  append   添加元素
  insert   插入元素(指定位置插入)
  remove   删除元素
  clear   清除列表
  find   查询元素
  get   获取元素
  first   获取第一个元素
  last   获取最后一个元素
  prev   移至前一个位置
  next   移至后一个位置
  front   移至开始位置
  end   移至结束位置
  hasPrev   是否有前一个元素
  hasNext   是否有后一个元素
  moveTo   移至指定位置
  length   返回列表的长度
  contains   是否包含指定元素
  toString   返回数据源dataSource

  

  以上的数据结构是根据实际需求来定义,不同的使用环境可以进行相应的修改。

三、代码实现

  1 //列表类
  2 var List = function () {
  3     //数据源
  4     this.dataSource = [];
  5     //数据长度
  6     this.size = 0;
  7     //当前位置
  8     this.position = 0;
  9 };
 10
 11 List.prototype.constructor = List;
 12
 13 List.prototype = {
 14     //添加元素
 15     append: function (element) {
 16         this.dataSource[this.size++] = element;
 17     },
 18     //插入元素
 19     insert: function (position, element) {
 20         if (position > -1) {
 21             this.dataSource.splice(position + 1, 0, element);
 22             this.size++;
 23             return true;
 24         }
 25         return false;
 26     },
 27     //移除元素
 28     remove: function (position) {
 29         this.dataSource.splice(position, 1);
 30     },
 31     //清除数据源
 32     clear: function () {
 33         delete this.dataSource;
 34         this.dataSource.length = 0;
 35         this.size = 0;
 36         this.position = 0;
 37     },
 38     //查询数据
 39     find: function (element) {
 40         for (var i = 0; i < this.dataSource.length; i++) {
 41             if (this.dataSource[i] == element) {
 42                 return i;
 43             }
 44         }
 45         return -1;
 46     },
 47     //获取数据
 48     get: function () {
 49         return this.dataSource[this.position];
 50     },
 51     //获取第一条数据
 52     first: function () {
 53         return this.dataSource[0];
 54     },
 55     //获取最后一条数据
 56     last: function () {
 57         return this.dataSource[this.size - 1];
 58     },
 59     //移至前一个位置
 60     prev: function () {
 61         this.position--;
 62     },
 63     //移至后一个位置
 64     next: function () {
 65         this.position++;
 66     },
 67     //移至开始位置
 68     front: function () {
 69         this.position = 0;
 70     },
 71     //移至结束位置
 72     end: function () {
 73         this.position = this.size - 1;
 74     },
 75     //是否有前一个元素
 76     hasPrev: function () {
 77         return this.position > 0;
 78     },
 79     //是否有后一个元素
 80     hasNext: function () {
 81         return this.position < this.size - 1;
 82     },
 83     //移至指定位置
 84     moveTo: function (position) {
 85         this.position = position;
 86     },
 87     //数据源长度
 88     length: function () {
 89         return this.size;
 90     },
 91     //是否包含指定元素
 92     contains: function (element) {
 93         for (var i = 0; i < this.dataSource.length; i++) {
 94             if (this.dataSource[i] == element) {
 95                 return true;
 96             }
 97         }
 98         return false;
 99     },
100     toString: function () {
101         return this.dataSource;
102     }
103 };

四、实例演示

 1 var list = new List();
 2 list.append("张三");
 3 list.append("李四");
 4 list.append("王五");
 5 list.append("赵六");
 6 console.log("list dataSource、size、position:", list.dataSource, list.size, list.position);
 7 //打印:list dataSource、size、position: ["张三", "李四", "王五", "赵六"] 4 0
 8
 9 console.log("list get():", list.get());
10 //打印:list get(): 张三
11
12 list.next();
13 console.log("list prev():", list.get());
14 //打印:list prev(): 李四
15
16 list.moveTo(3);
17 console.log("list moveTo():", list.get());
18 //打印:list moveTo(): 赵六
19
20 var position = list.find("王五");
21 console.log("list find():", position);
22 //打印:list find(): 2
23
24 var result = list.contains("曹七");
25 console.log("list contains():", result);
26 //打印:list contains(): false
时间: 2024-10-12 23:05:24

JavaScript数据结构之列表类List的相关文章

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

前言:在日常生活中,人们经常要使用列表,比如我们有时候要去购物时,为了购物时东西要买全,我们可以在去之前,列下要买的东西,这就要用的列表了,或者我们小时候上学那段时间,每次考完试后,学校都会列出这次考试成绩前十名的同学的排名及成绩单,等等这些都是列表的列子.我们计算机内也在使用列表,那么列表适合使用在什么地方呢?不适合使用在什么地方呢? 适合使用在:当列表的元素不是很多的情况下,可以使用列表,因为对列表中的元素查找或者排序时,效率还算非常高,反之:如果列表元素非常多的情况下,就不适合使用列表了.

第三章:数据结构与算法javascript描述: 列表

在日常生活中,人们经常使用列表:待办事项列表,购物清单,十佳榜单,最后十名榜单等.计算机也在使用列表,尤其是列表中元素保存的是太多时.当不需要一个很长的序列中查找元素,或对其进行排序时,列表显得尤为有用.反之,如果数据结构非常复杂,列表的作用就没有那么大了. 本章展示了如果创建一个简单的列表类,我们首先给列表给出抽象的数据类型定义,然后描述如何实现抽象数据类型(ADT),最后,分析几个列表适合解决的实际问题. 一,列表的抽象数据类型定义 为了设计列表的抽象数据类型,需要给出列表的定义,包括列表应

数据结构与算法——散列表类的C++实现(分离链接散列表)

散列表简介: 散列表的实现常被称为散列.散列是一种用于以常数平均时间执行插入.删除和查找的技术. 散列的基本思想: 理想的散列表数据结构只不过是一个包含一些项的具有固定大小的数组.(表的大小一般为素数) 设该数组的大小为TbaleSize,我们向该散列表中插入数据,首先我们将该数据用一个函数(散列函数)映射一个数值x(位于0到TbaleSize1-1之间):然后将该数据插入到散列表的第x的单元.(如果有多个数据映射到同一个数值,这个时候就会发生冲突) 散列函数介绍: 为了避免散列函数生成的值不是

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

队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素反而被优先处理.我们现在可以把队列想象对我们去餐馆吃饭的情景,很多人排队吃饭,排在最前面的人先打饭.新来的人只能在后面排队.直到轮到他们为止. 一:对队列的操作 队列有2种主要的操作,向队尾中插入新元素enqueue()方法和删除队列中的队首的元素的dequeue()方法,另外我们还有一个读取队头的元素,这个方法我们可以叫front()方法.该

JavaScript数据结构和算法

前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java)提供的工具.这些工具包括传统的数据结构(如链表,栈,队列,图等),也包括传统的排序和查找算法.本文主要是总结什么情况下使用何种数据结构较好,并没有细讲里面的原理和实现方式,仅仅提供给阅读过<数据结构和算法>的同学作为总结和参考笔记,如果未细究过数据结构和算法的同学,本文也可以作为一个方向,希望能引

JavaScript数据结构——图的实现

在计算机科学中,图是一种网络结构的抽象模型,它是一组由边连接的顶点组成.一个图G = (V, E)由以下元素组成: V:一组顶点 E:一组边,连接V中的顶点 下图表示了一个图的结构: 在介绍如何用JavaScript实现图之前,我们先介绍一些和图相关的术语. 如上图所示,由一条边连接在一起的顶点称为相邻顶点,A和B是相邻顶点,A和D是相邻顶点,A和C是相邻顶点......A和E是不相邻顶点.一个顶点的度是其相邻顶点的数量,A和其它三个顶点相连,所以A的度为3,E和其它两个顶点相连,所以E的度为2

JavaScript数据结构——队列的实现

前面楼主简单介绍了JavaScript数据结构栈的实现,http://www.cnblogs.com/qq503665965/p/6537894.html,本次将介绍队列的实现. 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头. 队列的两种主要操作是:向队列中插入新元素和删除队列中的元素.插入操作也叫做入队,删除操作也叫做出队.入队操

新的JavaScript数据结构Streams

最近在网上看到了一个新的 Javascript 小程序——Streams,起初以为是一个普通的 Javascript 类库,但读了关于它的介绍后,我发现,这不是一个简单的类库,而且作者的重点也不是这个类库的功能,而是——借用文中的一段话:如果你愿意花10分钟的时间来阅读这篇文章,你对编程的认识有可能会被完全的改变(除非你有函数式编程的经验!).塔河县臧清机械 还有:Streams 实际上不是一个新的想法.很多的函数式的编程语言都支持这种特征.所谓‘stream’是 Scheme 语言里的叫法,S

js数据结构描述--列表

<script type="text/javascript"> /** * 数据结构--列表 * [什么是列表] * [列表的使用场景] */ function list(){ this.dataStore = []; this.length = 0; this.postion = 0; this.append = append; this.contains = contains; this.push = push; this.pop = pop; this.remove