E数据结构实验之查找五:平方之哈希表
生活随笔
收集整理的這篇文章主要介紹了
E数据结构实验之查找五:平方之哈希表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
給定的一組無重復數據的正整數,根據給定的哈希函數建立其對應hash表,哈希函數是H(Key)=Key%P,P是哈希表表長,P是素數,處理沖突的方法采用平方探測方法,增量di=±i^2,i=1,2,3,…,m-1
Input
輸入包含多組測試數據,到 EOF 結束。
每組數據的第1行給出兩個正整數N(N <= 500)和P(P >= 2N的最小素數),N是要插入到哈希表的元素個數,P是哈希表表長;第2行給出N個無重復元素的正整數,數據之間用空格間隔。
Output
按輸入數據的順序輸出各數在哈希表中的存儲位置 (hash表下標從0開始),數據之間以空格間隔,以平方探測方法處理沖突。
Sample
Input
Output
10 6 4 5 3 7 8 0 9 6 10 2 1 #include<bits/stdc++.h>using namespace std;int Hash[555];int main() {int n, mod;while(cin >> n >> mod){memset(Hash, -1, sizeof(Hash));//初始化Hsah為-1for(int i = 0; i < n; i++){int k;cin >> k;k %= mod;Hash[k]++;//把取余后的數字放到hash數組中,并且加1,加1后hash中的數字就不會是-1if(!Hash[k]){cout << k; //hash中的數==0,就證明里面存放了數字且沒有沖突,輸出即可}else{for(int j = 1; j <= mod - 1; j++){if(Hash[(k + j * j) % mod] == -1)判斷是否已經有數字存放進去{Hash[(k + j * j) % mod]++;//做加1操作cout << (k + j * j) % mod;//輸出數據break;}else if(Hash[(k - j * j) % mod] == -1){Hash[(k - j * j) % mod]++;cout << (k - j * j) % mod;break;}}}if(i == n - 1)cout << endl;elsecout << " ";}}return 0; }總結
以上是生活随笔為你收集整理的E数据结构实验之查找五:平方之哈希表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C - 数据结构实验之查找三:树的种类统
- 下一篇: G - 数据结构实验之查找七:线性之哈希