美文网首页前端开发笔记
JavaScript数据结构与算法-列表练习

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

作者: 后除 | 来源:发表于2017-12-19 22:10 被阅读7次

实现列表类

// 列表类
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"]

相关文章

  • 前端干货 -03

    37. 算法 算法地址 数据结构与算法 JavaScript 描述. 章节练习https://github.com...

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

    实现列表类 练习 一. 增加一个向列表中插入元素的方法,该方法只在待插元素大于列表中的所有元素时才执行插入操作。这...

  • 数据结构

    原著: 数据结构与算法JavaScript描述 原著中代码存在很多问题,本文中的代码都有进行修改 一、列表 列表...

  • 【JavaScript 算法与数据结构】

    README.md JavaScript 算法与数据结构 本仓库包含了多种基于 JavaScript 的算法与数据...

  • [记录]我的数据结构学习路径

    书单 《学习JavaScript数据结构与算法》《大话数据结构》《算法图解》《剑指offer》 代码

  • 数据结构与算法学习

    书: 《数据结构与算法JavaScript描述》--Michael McMillan 1.JavaScript的编...

  • JavaScript描述数据结构与算法 -- 列表

    生活中人们经常使用列表,榜单、清单之类。当在列表中保存元素不是太多时,当不需要在一个很长的序列中查找元素,或者对其...

  • 数据结构与算法学习开篇

    数据结构与算法知识图谱 20个最常用的、最基础数据结构与算法 10个数据结构:数组、链表、栈、队列、散列表、二叉树...

  • 代码时间优化

    数据结构,循环 改进算法,选择合适的数据结构 字典(dictionary) 与 列表(list) 用途:多数据成员...

  • 学习JavaScript数据结构与算法

    《学习JavaScript数据结构与算法》数据结构是计算机为了高效地利用资源而组织数据的一种方式。数据结构和算法是...

网友评论

    本文标题:JavaScript数据结构与算法-列表练习

    本文链接:https://www.haomeiwen.com/subject/bdxwwxtx.html