实现列表类

// 列表类
function List () {
this.listSize = 0; // 列表的元素个数
this.pos = 0; // 列表的当前位置
this.dataStore = []; // 初始化一个空数组来保存列表元素
this.clear = clear; // 清空列表中的所有元素
this.find = find;
this.toString = toString;
this.insert = insert;
this.append = append;
this.remove = remove;
this.front = front;
this.end = end;
this.prev = prev;
this.next = next;
this.hasNext = hasNext;
this.hasPrev = hasPrev;
this.length = length;
this.currPos = currPos; // 返回列表的当前位置
this.moveTo = moveTo;
this.getElement = getElement; // 返回当前位置的元素
this.contains = contains;
}
// append: 给列表添加元素
function append (element) {
this.dataStore[this.listSize++] = element;
}
// find: 在列表中查找某一元素 indexOf?
function find (element) {
for (let i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
return i;
}
}
return -1;
}
// remove: 从列表中删除元素
function remove (element) {
let foundAt = this.find(element);
if (foundAt > -1) {
this.dataStore.splice(foundAt, 1);
this.listSize--;
return true;
}
return false;
}
// length: 列表中有多少个元素 与listSize区别?
function length () {
return this.listSize;
}
// toString: 显示列表中的元素
function toString () {
return this.dataStore;
}
// insert: 向列表中插入一个元素
function insert (element, after) {
let insertPos = this.find(after);
if (insertPos > -1) {
this.dataStore.splice(insertPos + 1, 0, element);
this.listSize++;
return true;
}
return false;
}
// clear: 清空列表中所有的元素
function clear () {
delete this.dataStore;
this.dataStore.length = 0;
this.listSize = this.pos = 0;
}
// contains: 判断给定值是否在列表中 find?
function contains (element) {
for (let i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
return true;
}
}
return false;
}
// 遍历列表
function front () {
this.pos = 0;
}
function end () {
this.pos = this.listSize - 1;
}
function prev () {
--this.pos;
}
function next () {
if (this.pos < this.listSize) {
++this.pos;
}
}
function currPos () {
return this.pos;
}
function moveTo (position) {
this.pos = position;
}
function getElement () {
return this.dataStore[this.pos];
}
function hasNext () {
return this.pos < this.listSize;
}
function hasPrev () {
return this.pos >= 0;
}

练习

一. 增加一个向列表中插入元素的方法,该方法只在待插元素大于列表中的所有元素时才执行插入操作。这里的大于有多重含义,对于数字,它是指数值上的大小;对于字母,它是指在字母表中出现的先后顺序。

List.prototype.insertThen = function (element) {
let type = typeof element;
if (type === `number`) {
// debugger;
for (let i = 0; i < this.dataStore.length; i++) {
if (typeof this.dataStore[i] === `number` && element > this.dataStore[i]) { // 同时满足是数字然后插入的元素大于数组内的元素
this.append(element);
return true;
}
}
} else {
let newArr = this.dataStore.filter((val) => {
return typeof val !== `number`;
}).concat([element]).sort();
if (newArr.indexOf(element) === (newArr.length - 1)) {
this.append(element);
return true;
}
}
return false;
};
// 示例
let DataThen = new List();
DataThen.append(`Mazey`);
DataThen.append(`Cherrie`);
DataThen.append(`Luna`);
DataThen.append(`John`);
DataThen.append(`July`);
DataThen.append(23);
DataThen.append(73);
console.log(DataThen.toString()); // ["Mazey", "Cherrie", "Luna", "John", "July", 23, 73]
DataThen.insertThen(99);
DataThen.insertThen(12);
console.log(DataThen.toString()); // ["Mazey", "Cherrie", "Luna", "John", "July", 23, 73, 99]
DataThen.insertThen(`Jay`);
DataThen.insertThen(`Zero`);
console.log(DataThen.toString()); // ["Mazey", "Cherrie", "Luna", "John", "July", 23, 73, 99, "Zero"]

二. 增加一个向列表中插入元素的方法,该方法只在待插元素小于列表中的所有元素时才执行插入操作。

List.prototype.insertThen = function (element) {
let type = typeof element;
if (type === `number`) {
// debugger;
for (let i = 0; i < this.dataStore.length; i++) {
if (typeof this.dataStore[i] === `number` && element < this.dataStore[i]) { // 同时满足是数字然后插入的元素大于数组内的元素
this.append(element);
return true;
}
}
} else {
let newArr = this.dataStore.filter((val) => {
return typeof val !== `number`;
}).concat([element]).sort();
if (newArr.indexOf(element) === 0) {
this.append(element);
return true;
}
}
return false;
};
// 示例
let DataThen = new List();
DataThen.append(`Mazey`);
DataThen.append(`Cherrie`);
DataThen.append(`Luna`);
DataThen.append(`John`);
DataThen.append(`July`);
DataThen.append(23);
DataThen.append(73);
console.log(DataThen.toString()); // ["Mazey", "Cherrie", "Luna", "John", "July", 23, 73]
DataThen.insertThen(99);
DataThen.insertThen(12);
console.log(DataThen.toString()); // ["Mazey", "Cherrie", "Luna", "John", "July", 23, 73, 12]
DataThen.insertThen(`Jay`);
DataThen.insertThen(`Zero`);
DataThen.insertThen(`Ada`);
console.log(DataThen.toString()); // ["Mazey", "Cherrie", "Luna", "John", "July", 23, 73, 12, "Ada"]

三. 创建Person类,该类用于保存人的姓名和性别信息。创建一个至少包含10个Person对象的列表。写一个函数显示列表中所有拥有相同性别的人。

function Person () {
this.list = [];
this.save = save;
this.showSameGender = showSameGender;
}
// 保存人名和性别
function save (name, gender) {
let littleCase = {
name,
gender
};
this.list.push(littleCase);
}
// 显示相同性别的人
function showSameGender (gender) {
let ret = [];
let len = this.list.length;
while (len--) {
if (this.list[len].gender === gender) {
ret.push(this.list[len].name);
}
}
return ret;
}
// 示例
let people = new Person();
people.save(`Mazey`, `male`);
people.save(`John`, `male`);
people.save(`Zero`, `male`);
people.save(`July`, `male`);
people.save(`Bob`, `male`);
people.save(`Ada`, `female`);
people.save(`Cherrie`, `female`);
people.save(`Luna`, `female`);
people.save(`Lucy`, `female`);
people.save(`June`, `female`);
console.log(people.list);
console.log(people.showSameGender(`male`)); // ["Bob", "July", "Zero", "John", "Mazey"]
console.log(people.showSameGender(`female`)); // ["June", "Lucy", "Luna", "Cherrie", "Ada"]

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

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

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

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

  2. javascript数据结构与算法——列表

    前言: 1. 数据的存储结构顺序不重要,也不必对数据进行查找,列表就是一种很好的数据存储结构; 2.此列表采用仿原生数组的原型链上的方法来写,具体可以参考MDN数组介绍,并么有用prototype来构 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Oracle表空间不足处理

    异常信息: 异常信息(异常类型:System.Data.OracleClient.OracleException) 异常提示:Oracle数据执行异常,请联系管理员处理 异常信息:ORA: 表 LC0 ...

  2. C#之正则表达式验证

    /** 匹配身份证号 规则: 15位纯数字或者18位纯数字或者17位数字加一位x */ var regex = new System.Text.RegularExpressions.Regex(@&q ...

  3. Atitit.跨语言  文件夹与文件的io操作集合  草案

    Atitit.跨语言  文件夹与文件的io操作集合  草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...

  4. Hybird App ( 混合模式移动应用)开发初体验

    最近1,2个月一直都尝试开发一款Hybird app,遇到了很多问题,谈谈自己的体会. Hybird app (混合模式移动应用),它利用例如安卓端webview组件+HTML5内嵌的方式混合的方式开 ...

  5. 微信全局获取并缓存Accesstoken的值

    由于本项目中使用自定义菜单接口.获取用户信息接口.用户分组接口.消息发送接口等,都需要传入一个相同的参数access_token,其有效期 是7200秒(两小时),在有效期内可以使用,一旦access ...

  6. 带你了解UIKit动力学

    一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象如:重力.弹性碰撞等现象 ...

  7. 【转】SQL SERVER 2005 数据库状态为“可疑”的解决方法

    --MyDB为修复的数据名 USE MASTER GO SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO ALTER DATABA ...

  8. 开发GPIO驱动的基本套路

    最近完成了基于AR9331的GPIO驱动的开发,主要包括:控制一个连接GPIO的灯控:接收一个连接GPIO的按键事件:以及接收一个连接GPIO的脉冲事件. 这里,结合开发实践,总结一下GPIO驱动开发 ...

  9. Oracle基础学习登陆SQLPLUS(一)

    SQLPLUS是ORACLE公司开发的非常简洁的管理工具,SQLPLUS是最好的,最核心的ORACLE管理工具.SQLPLUS简洁而高效,舍弃浮华,反璞归真.使用sqlplus,进入sqlplus并进 ...

  10. ffmpeg中的x264编码选项,对应关系

    )’ Disabled. ‘variance (1)’ Variance AQ (complexity mask). ‘autovariance (2)’ Auto-variance AQ (expe ...