当前位置: 代码迷 >> 综合 >> js版本基于链表法的散列表
  详细解决方案

js版本基于链表法的散列表

热度:47   发布时间:2023-09-06 14:00:45.0
let getWords=require("./1.js").getWords			//导入1.js,代码见字符串部分的文章
let char2int=require("./1.js").char2intwords=getWords(maxcount=555,minlen=1,maxlen=5,R=26)
words=Array.from(new Set(words))				//去重
console.log(words)
let M=31
var map=[]for(let i in words){let k=words[i]let v=k+"val"put(k,v,map)
}testGetAll(words,map)for(let i=0;i<5;i++){let k=words[Math.round(Math.random()*words.length)]delete_(k,map)console.log("delete "+k)
}
testGetAll(words,map)
console.log(1+"-->"+get(1,map))function testGetAll(words,map){for(let i in words){let k=words[i]let obj=get(k,map)let v=obj==undefined?undefined:obj.vif(k+"val"!=v){console.log("get test ERROR-->"+k)}}
}//node:{k:asd,v:asdval,next:node}
function hash(k,size=M){var code=0for(let i=0;i<k.length;i++){code=(code*R+char2int(k[i]))%M}return code
}function get(k,map){let code=hash(k)var node=map[code]while(node!=undefined){if(node.k==k){return node}node=node.next}
}function put(k,v,map){let code=hash(k)var node=map[code]var prev=nodeif(node==undefined){map[code]={k:k,v:v}return}while(node!=undefined){if(node.k==k){node.v=vreturn }prev=nodenode=node.next}prev.next={k:k,v:v}
}function delete_(k,map){let code=hash(k)var node=map[code]var prev=nodeif(node==undefined){return}if(node.k==k){map[code]=node.nextreturn}while(node!=undefined){if(node.k==k){prev.next=node.nextreturn }prev=nodenode=node.next}
}
  相关解决方案