本系列一系列文章的收集关于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());
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。