function LinkedList(){
var Node=function(element){
this.element=element;
this.next=null
}
var length=0
var head=null
this.append=function(element){
var node=new Node(element)
var current=null;
if(head==null){
head=node
}else{
current=head;
while(current.next){
current=current.next
}
current.next=node
}
length++
}
this.insert=function(position,element){
if(position>-1&&position<=length){
var node=new Node(element)
var current=head;
var previous;
var index=0;
if(position===0){
node.next=head
head=node
}else{
while(index++<position){
previous=current
current=current.next
}
node.next=current
previous.next=node
}
length++
return true
}else{
return false
}
}
this.removeAt=function(position){
if(position>-1&&position<length){
var current=head;
var previous;
var index=0;
if(position==0){
head=current.next;
}else{
while(index++<position){
previous=current
current=current.next
}
previous.next=current.next
}
length--
}else{
return null
}
}
this.remove=function(element){
var index=this.indexOf(element)
return this.removeAt(index)
}
this.indexOf=function(element){
var current=head;
var index=0
while(current){
if(element==current.element){
return index
}
index++
current=current.next
}
return -1
}
this.isEmpty=function(){
return length===0
}
this.size=function(){
return length
}
this.getHead=function(){
return head
}
this.toString=function(){
var current=head;
var string=''
while(current){
string+=(current.element+',')
current=current.next
}
return string
}
}
var ValuePair=function(key,value){
this.key=key
this.value=value
this.toString=function(){
return '['+this.key+'-'+this.value+']'
}
}
function hashTable(){
var table=[]
var loseloseHashCode=function(key){
var hash=0
for(var i=0;i<key.length;i++){
hash+=key.charCodeAt(i)
}
return hash%37
}
this.put=function(key,value){
var position=loseloseHashCode(key) //由于可能有冲突 这里的position作为每条链表的总key 链表元素每个element有key 和value
if(table[position]==undefined){
table[position]=new LinkedList()
}
table[position].append(new ValuePair(key,value))
}
this.get=function(key){
var position=loseloseHashCode(key)
if(table[position]!=undefined){
var current=table[position].getHead()
while(current.next){
if(current.element.key===key){
return current.element.value
}
current=current.next
}
if(current.element.key===key){ //只有一个元素的情况下
return current.element.value
}
}
return undefined
}
this.remove=function(key){
var position=loseloseHashCode(key)
if(table[position]!==undefined){
var current=table[position].getHead()
while(current.next){
if(current.element.key===key){
table[position].remove(current.element)
if(table[position].isEmpty()){
table[position]=undefined
}
return true
}
current=current.next
}
if(current.element.key===key){
table[position].remove(current.element);
if(table[position].isEmpty()){
table[position]=undefined
}
return true
}
}else{
return false
}
}
this.getAll=function(){
return table
}
}
var hash=new hashTable()
hash.put("Tyrion","wangxu")
hash.put("Tyrion","miaotiezheng")
hash.put("Tyrion3","ppp")
console.log(hash.getAll())
console.log(hash.get("Tyrion"))
console.log(document.getElementsByTagName("*"))
在平常的生产过程中 特别是前端 用的地方不多 即便理解了 过段时间也很可能会忘 权当了解
网友评论