JS散列表碰撞处理、开链法、HashTable散列示例
程序员文章站
2024-02-10 17:14:52
本文实例讲述了js散列表碰撞处理、开链法、hashtable散列。分享给大家供大家参考,具体如下:
/**
* 散列表碰撞处理、开链法、hashtable散列...
本文实例讲述了js散列表碰撞处理、开链法、hashtable散列。分享给大家供大家参考,具体如下:
/** * 散列表碰撞处理、开链法、hashtable散列。 * 将数组里的元素位置,也设置为数组,当两个数据的散列在同一个位置时, * 就可以放在这个位置的二维数组里,解决了散列函数的碰撞处理问题 */ function hashtable() { this.table = new array(137); this.betterhash = betterhash;//散列函数 this.showdistro = showdistro;//显示散列表里的数据 this.buildchains = buildchains;//生成二维数组 this.put = put;//将数据存储到散列表 this.get = get;//从散列表中取出某个数据 } // put for separate chaining function put(key, data) { var pos = this.betterhash(key); var index = 0; if (this.table[pos][index] == undefined) { this.table[pos][index] = data; }else { while (this.table[pos][index] != undefined) { ++index; } this.table[pos][index] = data; } } /*散列函数*/ function betterhash(string) { const h = 37; var total = 0; for (var i = 0; i < string.length; ++i) { total += h * total + string.charcodeat(i); } total = total % this.table.length; if (total < 0) { total += this.table.length-1; } return parseint(total); } function showdistro() { var n = 0; for (var i = 0; i < this.table.length; ++i) { if (this.table[i][n] != undefined) { console.log(i + ": " + this.table[i]); } } } function buildchains() { for (var i = 0; i < this.table.length; ++i) { this.table[i] = new array(); } } // get for separate chaining function get(key) { var index = 0; var pos = this.betterhash(key); while ((this.table[pos][index] != undefined)&&(this.table[pos][index] != key)) { index += 1; } if(this.table[pos][index] == key) { console.log(key+" 的键值为: "+this.table[pos][index]); return this.table[pos][index]; }else{ console.log("无该键值"); return undefined; } } /*测试开链法*/ var somenames = ["david", "jennifer", "donnie", "raymond", "cynthia", "mike", "clayton", "danny", "jonathan"]; var htable = new hashtable(); htable.buildchains(); for (var i = 0; i < somenames.length; ++i) { htable.put(somenames[i],somenames[i]); } htable.showdistro(); htable.betterhash("jennifer"); htable.get("jennidfer"); htable.get("jennifer");
使用在线html/css/javascript代码运行工具:http://tools.jb51.net/code/htmljsrun测试上述代码,可得如下运行结果:
更多关于javascript相关内容感兴趣的读者可查看本站专题:《javascript数学运算用法总结》、《javascript数据结构与算法技巧总结》、《javascript数组操作技巧总结》、《javascript排序算法总结》、《javascript遍历算法与技巧总结》、《javascript查找算法技巧总结》及《javascript错误与调试技巧总结》
希望本文所述对大家javascript程序设计有所帮助。