linknode.h
#includeusing namespace std;
class link;
class linknode
linknode(int num):key(num),next(null){}
int getkey()
};
link.h
#include"linknode.h"
class head;
class link
link(linknode* node):head(node)
~link()
void makeempty() }
int getlength()
void insert(int num)
linknode* q=head,*t=head->next;
if(q->key>num)
while(t)
else
}q->next=p;
} bool delete(int num)
while(t)
else if(t->keynext;
}} return 0;
} int search(int num)
else if(p->keynext;
}else
}return 0;
} bool isempty()
else
return 0;
} void print(int num)
cout<
head.h
#includeusing namespace std;
class hash;
class head
head(link* node1,head* node2,head* node3):table(node1),pre(node2),next(node3),flag(1)
{} ~head()
head* getnext()
head* getpre()
link* gettable()
bool isempty()
void insert(int num)
bool delete(int num)
};
hash.h
#include"link.h"
#include"head.h"
class hash
}else
else}}
head[key].insert(num);
} bool delete(int num,int n)
else if(n==2)
else
bool f=head[key].delete(num);
//如果該節點的table為空,則將該節點連線到空鏈上
if(head[key].table->isempty())
if(j>=length)
if(flagi&&!head[i].isempty())
else
}if(flagj&&!head[i].isempty())
else
}if(flag1&&flag2)
}} return f;
} int search(int num,int n)
else if(n==2)
else
if(head[key].table->search(num)!=0)
else
return -1;
} void print(int num) }
};
test.cpp
#include"hash.h"
int main()
; int i;
for(i=0;i<15;i++)
for(i=0;i<15;i++)
cout<
演算法導論 第十一章 雜湊表
當將乙個域u中的元素對映到乙個雜湊表t中時,我們如何對映?若對映到同一位置怎麼辦?前乙個問題我們通過hash函式來解決,後乙個問題我們通過 衝突處理 解決。1 除法 h k k mod m m的選取 素數,且不要太靠近 2的冪次方 2 乘法 其中,0 eg 當m 8 2 3,w 7時 3 全域雜湊 ...
演算法導論 第十一章 雜湊表
演算法導論 第十章 雜湊表 雜湊表大概就是把給每個要儲存的資料都用雜湊函式給定乙個關鍵字,對應到乙個槽。由於不同的資訊可能對應同樣的關鍵字,也就是說對應同乙個槽,這時要解決其衝突,解決衝突可以用鏈結法,和開放定址法。對於鏈結法,其對於衝突採取鍊錶進行解決,這樣就保證了資料不會發生衝突。其查詢的平均時...
演算法導論 第十一章 雜湊表
雜湊表是實現字典操作的一種有效資料結構。雜湊表是普通陣列概念的推廣,由於對普通陣列可以直接定址,使得能在o 1 時間內訪問陣列中的任意位置。如果儲存空間允許,我們可以提供乙個陣列,為每個可能的關鍵字保留乙個位置,以利用直接定址技術的優勢。當實際儲存的關鍵字數目比全部的可能關鍵字總數要小時,採用雜湊表...