<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function LinkedList() {
this.head = null;
this.length = 0;
function Node(data) {
this.data = data;
this.next = null;
}
LinkedList.prototype.push = function(data) {
var newNode = new Node(data);
if (this.length == 0) {
this.head = newNode;
} else {
var current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
this.length += 1;
}
}
function HashLinked() {
this.storage = [];
this.count = 0;
this.limit = 7;
HashLinked.prototype.hashFunc = function(str, size) {
var hashCode = 0;
for (var i = 0; i < str.length; i++) {
hashCode = hashCode * 37 + str.charCodeAt(i);
}
return hashCode % size;
}
HashLinked.prototype.put = function(key, value) {
var index = this.hashFunc(key, this.limit);
var bucket = this.storage[index];
if (bucket == null) {
bucket = new LinkedList();
this.storage[index] = bucket;
}
var current = bucket.head;
while (current) {
if (current.data[0] == key) {
current.data[1] = value;
return;
}
current = current.next;
}
bucket.push([key, value]);
this.count += 1;
}
}
var h = new HashLinked();
h.put('abc', 222);
h.put('cba', 333);
h.put('nbc', 444);
h.put('rfd', 456);
h.put('hte', 648);
h.put('kuc', 946);
h.put('yrc', 864);
console.log(h);
</script>
</body>
</html>
JS实现哈希表(拉链法链表处理冲突)
于 2022-01-26 22:21:45 首次发布