散列表查詢數組
散列表的查找步驟:dom
構造散列函數的兩個基本原則:函數
計算簡單;分佈均勻spa
方法:指針
選取方法時可參照的方向:code
處理散列衝突的方法:blog
1 #define HASESIZE 12 2 #define NULLKEY -32768 3 4 //利用散列函數獲得偏移地址,在數組中對偏移地址存儲相應數據達到查找效率爲O(1) 5 typedef struct{ 6 int *elem;//數據元素基址(首地址),動態分配數組; 7 int count;//當前數據元素個數 8 }HashTable; 9 10 int InitHashTable(HashTable *H){ 11 int i; 12 H->count=HASESIZE; 13 H->elem=(int *)malloc(HASESIZE*sizeof(int)); 14 if(!H->elem){ 15 return -1; 16 } 17 for(i=0;i<HASESIZE;i++){ 18 H->elem[i]=NULLKEY; 19 } 20 return 0; 21 } 22 23 //使用除留餘數法 24 int Hash(int key){ 25 return key % HASESIZE; 26 } 27 28 //插入關鍵字到散列表 29 void InsertHash(HashTable *H,int key){ 30 int addr=Hash(key); 31 while(H->elem[addr]!=NULLKEY){//出現衝突 32 addr=(addr+1) % HASESIZE;//開放定址法處理 33 if(addr==Hash(key)){ 34 return ;//已近存滿 35 } 36 } 37 H->elem[addr]=key; 38 } 39 40 //散列表查找關鍵字 41 int SearchHase(HashTable H,int key,int *addr){ 42 *addr=Hash(key); 43 while(H.elem[*addr]!=key){ 44 *addr=(*addr+1)%HASESIZE; 45 if(H.elem[*addr]==NULLKEY || *addr==Hash(key)){ 46 return -1; 47 } 48 } 49 return 0; 50 }