资讯专栏INFORMATION COLUMN

javascript 数据结构系列

tianhang / 2673人阅读

摘要:也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。如果对象没有该实例化该处为一对象如果该不存在就增加一个数量

本系列一系列文章的收集关于javascript中的数据结构

如果你对数据结构不太熟悉 可以看这篇文章
如果你只想看代码 可以看这篇文章
如果你只想star 可以去这里

什么是数据结构
在计算机科学或信息学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式 From Wikipedia

完整wiki解释地址

没有一种数据结构是完美的 你需要了解所有数据结构的优势和劣势 合理的运用数据结构实现自己目标

复杂性

算法的复杂性是算法优势和劣势的一种体现 算法复杂性包括空间复杂性和时间复杂性

空间复杂性大概或许就是数据结构所需要使用的内存数量
时间复杂性大概或许就是时间啦

如何选择合适的算法

依赖选择的数据


array

An Array data structure, or simply an Array, is a data structure consisting of a collection of elements (values or variables), each identified by at least one array index or key. The simplest type of data structure is a linear array, also called one-dimensional array. From Wikipedia

js 有array结构不过不是很强大 我们可以自定义一下一个加强版

class MyArray {
    constructor() {
        this.array = [];
    }

    add(data) {
        return this.array.push(data);
    }

    remove(data) {
        // 如果找到数据就删除
        if(~this.array.indexOf(data)) {
            this.array.splice(this.array.indexOf(data), 1);
        }
    }

    search(data) {
        // 如果找打数据就返回
        if(~this.array.indexOf(data)) {
            return this.array.indexOf(data);
        } else {
            return null;
        }
    }

    getAtIndex(index) {
        return this.array[index];
    }

    length() {
        return this.array.length;
    }

    print() {
        console.log(this.array.reduce(function(prev, curr) {
            return prev + curr + " ";
        }, "").trim());
    }
}
hashtable

散列表Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表

class HashTable {
    constructor(size) {
        this.values = {};
        this.numberOfValues = 0;
        this.size = size;
    }
    add(key, value) {
        var hash = this.calculateHash(key);
        // 如果对象没有该key  实例化该key处为一对象
        if(!this.values.hasOwnProperty(hash)) {
            this.values[hash] = {};
        }
        // 如果该key不存在 就增加一个数量
        if(!this.values[hash].hasOwnProperty(key)) {
            this.numberOfValues++;
        }
        this.values[hash][key] = value;
    }
    remove(key) {
        var hash = this.calculateHash(key);
        if(this.values.hasOwnProperty(hash) &&  this.values[hash].hasOwnProperty(key)) {
            delete this.values[hash][key];
            this.numberOfValues--;
        }
    }
    calculateHash(key) {
        return key.toString().length % this.size;
    }
    search(key) {
        var hash = this.calculateHash(key);
        if(this.values.hasOwnProperty(hash) &&  this.values[hash].hasOwnProperty(key)) {
            return this.values[hash][key];
        } else {
            return null;
        }
    }
    length() {
        return this.numberOfValues;
    }
    print() {
        var string = "";
        for(var value in this.values) {
            for(var key in this.values[value]) {
                string += this.values[value][key] + " ";
            }
        }
        console.log(string.trim());
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86274.html

相关文章

  • 你需要的前端进阶书籍清单,分享下载

    摘要:写在前面目前专注深入学习,特花了点时间整理了一些前端学习相关的书籍。大致分为以下大系列系列系列基础系列应用系列进阶系列类库系列框架系列。这些书籍在这里免费提供下载,有兴趣的一起学习。 写在前面 目前专注深入JavaScript学习,特花了点时间整理了一些前端学习相关的书籍。 大致分为以下7大系列:CSS系列、DOM系列、JavaScript基础系列、JavaScript应用系列、Ja...

    yuanzhanghu 评论0 收藏0
  • JavaScript专题系列文章

    摘要:专题系列共计篇,主要研究日常开发中一些功能点的实现,比如防抖节流去重类型判断拷贝最值扁平柯里递归乱序排序等,特点是研究专题之函数组合专题系列第十六篇,讲解函数组合,并且使用柯里化和函数组合实现模式需求我们需要写一个函数,输入,返回。 JavaScript 专题之从零实现 jQuery 的 extend JavaScritp 专题系列第七篇,讲解如何从零实现一个 jQuery 的 ext...

    Maxiye 评论0 收藏0
  • JS系列之目录

    摘要:设计模式资源整理操作符小知识点实现发邮件功能数据结构与算法资源整理跨域函数的合成与柯里化系列之防抖节流系列之正则系列之系列之系列之编码系列之系列之操作符对象中的坐标检测对象或数组系列之机制系列之构造对象系列之总结系列之浅复制与深复制系列之对 Javascript设计模式资源整理JS操作符JS小知识点JS实现发邮件功能数据结构与算法资源整理跨域函数的合成与柯里化JS系列之防抖节流JS系列...

    AaronYuan 评论0 收藏0
  • JavaScript 是如何工作的系列文章已更新到22篇

    摘要:为了方便大家共同学习,整理了之前博客系列的文章,目前已整理是如何工作这个系列,可以请猛戳博客查看。以下列出该系列目录,欢迎点个星星,我将更友动力整理理优质的文章,一起学习。 为了方便大家共同学习,整理了之前博客系列的文章,目前已整理 JavaScript 是如何工作这个系列,可以请猛戳GitHub博客查看。 以下列出该系列目录,欢迎点个星星,我将更友动力整理理优质的文章,一起学习。 J...

    lx1036 评论0 收藏0
  • WebSocket系列JavaScript中数字数据如何转换为二进制数据

    摘要:以和为例,说明中的数字数据如何转换为二进制数据。对象用来表示通用的固定长度的原始二进制数据缓冲区。中的数字数据如何转换为二进制数据对和有了一个大概的了解,下面让我们来看下它是如何进行二进制数据操作的。 概述 本文主要通过对JavaScript中数字数据与二进制数据之间的转换,让读者能够了解在JavaScript中如何对数字类型(包括但不限于Number类型)进行处理。 二进制数据在日常...

    MASAILA 评论0 收藏0
  • WebSocket系列之字符串如何与二进制数据间进行互相转换

    摘要:总结通过使用和,我们能够在数据和二进制数据中进行互相转换。下一篇系列相关的博客,将会介绍如何通过来向后端传递二进制数据,以及如何处理通过收到的二进制数据。 概述 上一篇博客我们说到了如何进行数字类型(如Short、Int、Long类型)如何在JavaScript中进行二进制转换,如果感兴趣的可以可以阅读本系列第二篇博客——WebSocket系列之JavaScript中数字数据如何转换为...

    stackfing 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<