博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js实现数据结构及算法之列表(List)
阅读量:6813 次
发布时间:2019-06-26

本文共 2991 字,大约阅读时间需要 9 分钟。

前言:

最近在学习数据结构及算法,数据结构:列表,栈,队列,链表,字典,散列,集合,二叉树算法:图和图算法排序算法:冒泡、选择、插入、希尔、归并、快速检索算法:顺序查找,二分查找;还有高级一点的动态规划贪心算法,这些都会用js一一实现,算是记录下来,给自己以后复习用吧。

先上代码:列表

概念及定义:

列表是一组有序的数据,每个列表中数据被称为元素,元素的数量受内存控制。

不包括任何元素的列表称为空列表。

应用:

不需要很长序列查找元素或排序,元素不是很多。

js实现:

/** * 一个简单的列表 * @constructor */function List() {  this.dataSource = [];//初始化一个空数组来保存列表元素  this.listSize = 0;  // 列表长度  this.pos = 0;  // 当前位置  this.append = append; // 在列表的末尾添加元素  this.find = find; // 是否包含元素  this.getLength = getLength; // 获取列表的长度  this.remove = remove; // 从列表中删除当前元素  this.toString = toString; // 返回列表的字符串形式  this.insert = insert; //在当前位置元素的后面插入元素  this.clear = clear; // 清空列表  this.front = front; // 将列表的当前位置移动到第一个元素位置  this.end = end; // 将列表的当前位置移动到最后一个元素位置  this.getElement = getElement; // 返回当前位置的元素  this.prev = prev; // 将列表的当前位置向前移动一位  this.next = next; // 将列表的当前位置向后移动一位  this.currentPos = currentPos; // 返回列表的当前位置  this.moveTo = moveTo; // 将当前位置移动到指定位置  this.contains = contains; //是否包含该元素  this.loop = loop; // 列表的遍历器}/** * 给列表最后添加元素的时候,列表元素个数+1 * @param element */function append(element) {  this.listSize++;  this.dataSource.push(element);}/** * @param element 如果传入的是对象,需要判断是否是对象以及两个对象是否相等 * @returns {number} 如果找到,返回位置,否则-1 */function find(element) {  for (var i = 0; i < this.dataSource.length; i++) {    if (this.dataSource[i] === element) {      return i;    }  }  return -1;}/** * 返回列表元素的个数 * @returns {number} */function getLength() {  return this.listSize;}/** * 删除元素成功,元素个数-1 * @param element * @returns {boolean} */function remove(element) {  var removeIndex = this.find(element);  if (removeIndex !== -1) {    this.dataSource.splice(removeIndex, 1);    this.listSize--;    return true;  }  return false;}/** * 返回要展示的列表 * @returns {string} */function toString() {  return this.dataSource.toString();}/** * 插入某个元素 * @param element 要插入的元素 * @param afterElement 列表中的元素之后 * @returns {boolean} */function insert(element, afterElement) {  var insertIndex = this.find(afterElement);  if (insertIndex !== -1) {    this.dataSource.splice(insertIndex + 1, 0, element);    this.listSize++;    return true;  }  return false;}/** * 清空列表中的所有元素 */function clear() {  delete this.dataSource;  this.dataSource = [];  this.listSize = this.pos = 0;}/** * 将列表的当前位置移动到第一个元素 */function front() {  this.pos = 0;}/** * 将列表的当前位置移动到最后一个元素 */function end() {  this.pos = this.listSize - 1;}/** * 返回当前位置的元素 * @returns {*} */function getElement() {  return this.dataSource[this.pos];}/** * 将当前位置向前移动一位 */function prev() {  --this.pos;}/** * 将当前位置向后移动一位 */function next() {  ++this.pos;}/** * 返回列表的当前位置 * @returns {number|*} */function currentPos() {  return this.pos;}/** * 移动到指定位置 * @param position */function moveTo(position) {  this.pos = position;}/** * 是否包含某个元素 * @param element * @returns {boolean} */function contains(element) {  if(!this.listSize) return false  var index = this.dataSource.indexOf(element)  return index}/** * 迭代器:遍历出所有的元素及其位置 * @param function(index, data) */function loop (cb) {  for(this.front();this.currentPos()

转载地址:http://ttzzl.baihongyu.com/

你可能感兴趣的文章
福州seo维思:浅谈微博营销十大因素
查看>>
android 网络框架
查看>>
省赛热身赛之Javabeans
查看>>
$.format,jquery.format 使用说明
查看>>
安装LSB--lsb_release:command not found
查看>>
大数据量时Mysql的优化要点
查看>>
我的友情链接
查看>>
形似而神不似:云计算治理与SOA治理
查看>>
Ubuntu使用root用户+安装mysql5.07+基础配置
查看>>
常用命令及目录介绍
查看>>
实现手机号属地查询
查看>>
区块链3.0_精通Hyperledger之搭建Farbic-samples环境(2)
查看>>
VMware下ubuntu上网设置(二)
查看>>
Maven3路程(三)用Maven创建第一个web项目(转)
查看>>
网站pr突然从0变成3了.一夜之间pr升到3了.
查看>>
php新手入门之PHP常用特殊运算符号
查看>>
Android Studio 使用NDK编译jni
查看>>
口字型网络建立HSRP
查看>>
PostgreSQL中如何判断某个SCHEMA是否存在。
查看>>
多线多IP交换机配置(华为交换机)
查看>>