自己實現拉鍊法雜湊表
阿新 • • 發佈:2021-12-08
1 #include<bits/stdc++.h> 2 #define mytest 3 using namespace std; 4 const int N=1e5+5; 5 const int mod=1337; 6 int h[N];//h[i]表示key為i的開頭節點編號 7 int tot; 8 struct edge//鏈式前向星存節點 e[i]表示第i個節點的編號 9 { 10 int val,next;//節點記憶體的是當前節點的value和下一個節點的編號; 11 }e[N]; 12 void addedge(int key,int val) 13 {14 key%=mod; 15 e[tot]=(edge){val,h[key]}; 16 h[key]=tot++; 17 } 18 int findhash(int key,int info) 19 { 20 key%=mod; 21 for(int i=h[key];~i;i=e[i].next) 22 { 23 if(e[i].val==info)return 1; 24 } 25 return 0; 26 } 27 int main() 28 { 29 #ifdef mytest//如果定義了mydest巨集就執行直到endif;沒有就跳過這段30 freopen("in.txt","r",stdin); 31 freopen("out.txt","w",stdout); 32 cout<<"great!"<<endl; 33 #endif 34 memset(h,-1,sizeof(h)); 35 for(int i=1;i<=11;i++) 36 { 37 int x; 38 scanf("%d",&x); 39 addedge(x,x); 40 } 41 //addedge(1338,1338);42 for(int i=1;i<=10;i++)cout<<findhash(i,i)<<" "<<i<<endl; 43 cout<<findhash(1338,1338)<<endl; 44 cout<<findhash(1337,1337)<<endl; 45 return 0; 46 }