/** 題目:給定乙個全部由字串組成的字典,字串全部由大寫字母構成。其中為每個字串編寫密碼,編寫的
* 方式是對於 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...