数据与算法

阅读: 评论:0

数据与算法

数据与算法

封装哈希表
哈希表的常见操作为:

put(key,value):插入或修改操作;
get(key):获取哈希表中特定位置的元素;
remove(key):删除哈希表中特定位置的元素;
isEmpty():如果哈希表中不包含任何元素,返回trun,如果哈希表长度大于0则返回false;
size():返回哈希表包含的元素个数;
resize(value):对哈希表进行扩容操作;

/**** 实现哈希表 CRUD** */function HashTable(){this.table = [];//元素数量unt = 0;//哈希表大小this.size = 7;//哈希函数function HashFunc(str, size) {let Hashcode = 0;for (let i = 0; i < str.length; i++) {Hashcode = 37 * Hashcode + str.charCodeAt(i);}return Hashcode % size;}//放入数据HashTable.prototype.put = function (key,val){let index = HashFunc(key, this.size)let bucket = this.table[index];if (bucket == null){bucket = [];this.table[index] = bucket;}for (let j = 0; j < bucket.length; j++) {let tuple = bucket[j];if (tuple[0] === key){tuple[1] = val;return;}}bucket.push([key,val]);unt += 1;if (unt > this.size * 0.75){Prime(this.size *2));}}//获取数据 = function (key){let index = HashFunc(key,this.size);let bucket = this.table[index];if (bucket == null) return null;for (let i = 0; i < bucket.length; i++) {let tuple = bucket[i];if (tuple[0] === key){return tuple[1];}}return null;}//删除数据ve = function (key){let index = HashFunc(key,this.size);let bucket = this.table[index];if (bucket == null) return false;for (let i = 0; i < bucket.length; i++) {let tuple = bucket[i];if (tuple[0] === key){bucket.splice(i,1);unt -=1;if (this.size > 7 && unt < this.size * 0.25 ){Prime(Math.floor(this.size / 2)));}return true;}}return false;}//是否为空HashTable.prototype.isEmpty = function (){unt === 0 ;}//元素数量size = function (){unt;}//hash表扩容size = function (newSize){/*** 扩容条件* 1、装载因子(元素数量 / hash表长度) < 0.25 时缩容* 2、装载因子(元素数量 / hash表长度) > 0.75 时扩容* */this.size = newSize;let tem = [];for (let i = 0; i <this.table.length; i++) {let bucket = this.table[i];if(bucket == null) continue;for (let j = 0; j < bucket.length; j++) {tem.push(bucket[j]);}}this.table = [];unt = 0;for (let i = 0; i < tem.length; i++) {this.put(tem[i][0],tem[i][1]);}unt;}Prime = function (num){while (!this.isPrime(num)){num++;}return num;}HashTable.prototype.isPrime = function (num){for (let i = 2; i <= parseInt(Math.sqrt(num));i++) {if (num % i === 0){return false;}}return true;}}let has = new HashTable();// console.("wcc"));
// console.("cjt"));
// console.ve('yxh'))
// console.("yxh"));
// console.("666"));has.put('yxh',{age:50})
has.put('cjt',{age:56})
has.put('wcc',{age:35})
has.put('wcc',{age:35})
has.put('cwc',{age:35})
has.put('ccw',{age:35})
has.put('sfhsajkfh',{age:666})
has.put('sfsafisuiof',{age:999})console.log(has.table,has.size)

判断质数。。。。。。。。。。。。。。。

哈希函数封装。。。。。。。。。。。。。。。

本文发布于:2024-02-04 10:51:33,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170705490254913.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:算法   数据
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23