雜湊表查詢 C語言實現

2021-08-31 12:42:18 字數 1585 閱讀 7188

/*

* 題目:給定乙個全部由字串組成的字典,字串全部由大寫字母構成。其中為每個字串編寫密碼,編寫的

* 方式是對於 n 位字串,給定乙個 n 位數,大寫字母與數字的對應方式按照**鍵盤的方式:

* 2: a,b,c 5: j,k,l 8: t,u,v

* 3: d,e,f 6: m,n,o 9: w,x,y,z

* 4: g,h,i 7: p,q,r,s

* 題目給出乙個1--12位的數,找出在字典中出現且密碼是這個數的所有字串。字典中字串的個數不超過5000。

*

* 思路:1.回溯法找出所有可能的字串

* 2.在字典中查詢此字串是否存在。(字典儲存採用雜湊表儲存)

* */

#include#include#include#define hashtable_length 5001 //雜湊表長度

#define string_length 13 //單詞最大長度

//字串

typedef struct

hstring;

hstring string=; //暫存可能的字串

hstring hashtable[hashtable_length]; //雜湊表

//hash函式,構造雜湊表

void createhashtable(char *str)

key%=hashtable_length;

while(1)

key=(key+step+hashtable_length)%hashtable_length;

//處理衝突,線性探測再雜湊

if(step>0)

step=-step;

else }}

//從檔案中讀字典

void readstring()

i=0;

while((ch=getc(fp))!=eof)

str[i++]=ch;

} if(fclose(fp))

}//在雜湊表中查詢是否存在該字串,存在返回1,不存在返回0

int search(char *str)

key%=hashtable_length;

while(1)

key=(key+step+hashtable_length)%hashtable_length;

//處理衝突,線性探測再雜湊

if(step>0)

step=-step;

else

} return 0;

}//求所有可能的字串

void getstring(char* num)

digit=*num-'0';//取第一位字元,轉成數字

if(digit>=2&&digit<=6)

else if(digit==7)

else if(digit==8)

else if(digit==9)

for(i;i}void main()

雜湊表 C語言實現

這裡不講高深理論,只說直觀感受。雜湊表的目的就是為了根據資料的部分內容 關鍵字 直接計算出存放完整資料的記憶體位址。void list find by key list,key return p 為了解決根據關鍵字快速找到元素的存放位址,雜湊表應運而生。它通過某種演算法 雜湊函式 直接根據關鍵字計算...

c語言實現雜湊表

雜湊表大家都在資料結構中學習過,應該是查詢最快的一種資料結構了,最好的情況下可以達到線性的時間複雜度。鍵key的狀態碼如果為 vt undefined 的話那麼就是這個槽位沒有被占用或者已經被刪除了 值value的狀態碼有vt true和vt false兩種,只要這個槽位已經被占用過了,那麼valu...

雜湊表的C語言實現

include include define hashsize 12 define nullkey 32768 typedef structhashtable int m 0 初始化雜湊表 int inithashtable hashtable h return 1 雜湊函式 int hash in...