本系列一系列文章的收集关于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());
    }
}

andypinet
1.2k 声望41 粉丝

求一个常州 无锡 镇江的前端工作