微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!
散列表专题提供散列表的最新资讯内容,帮你更好的了解散列表。
散列表,散列函数,碰撞处理解决:线性探测法
散列表,散列函数,碰撞处理解决:线性探测法/** 散列表,散列函数,碰撞处理解决:线性探测法* 原理:散列表位置碰撞时,检查散列表下一个位置是否为空,为空就存入数据;不为空,继续检测下一个位置。* 直到找到一个空的位置为止。* 当数组的大小是要存储的数据两倍以上时,线性探测法比开链法好** */function HashTable() {this.table = new Array(137);this.values = [];this.betterHash = betterHash;this.showDistro = showDistro;this.put = put;this.get = get;}// put for linear probingfunction put(key, data) {var pos = this.betterHash(key);if (this.table[pos] == undefined) {this.table[pos] = key;this.values[pos] = data;}else{while (this.table[pos] != undefined) {pos++;}this.table[pos] = key;this.values[pos] = 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() {for (var i = 0; i < this.table.length; ++i) {if (this.table[i] != undefined) {console.log(this.table[i] + ": " + this.values[i]);}}}// get for linear probingfunction get(key) {var hash = this.betterHash(key);for (var i = hash; this.table[hash] != undefined; i++) {if (this.table[hash] == key) {console.log("查找到的键值为: "+this.values[hash]);return this.values[hash];}}console.log("无该键值!");return undefined;}/*测试线性探测法*/var someNames = ["David", "Jennifer", "Donnie", "Raymond","Cynthia", "Mike", "Clayton", "Danny", "Jonathan"];var hTable = new HashTable();for (var i = 0; i < someNames.length; ++i) {hTable.put(someNames[i],someNames[i]);}hTable.showDistro();hTable.get("Jennifer");