程序填空题:哈希表查找(线性探查法)
输入不大于m的n个不为0(0表示空值)的数,用线性探查法解决冲突构造散列表。输入一个值key,在散列表中查找key位置。
```c++
#include
using namespace std;
#define m 16
#define NULLKEY 0
struct HashTable{
int key;
};
void CreateHash(HashTable HT[],int n);//实现细节隐藏
int SearchHash(HashTable HT[],int key){
int H0=key%13;
int Hi;
if (@@[HT[H0].key==NULLKEY](2)) return -1;
else if (@@[HT[H0].key==key](2)) return H0;
else{
for(int i=1;i Hi=@@[(H0+i)%m](2);
if (@@[HT[Hi].key==NULLKEY](2)) return -1;
else if (@@[HT[Hi].key==key](2)) return Hi;
}
return -1;
}
}
int main()
{ int value,key;
int result;
int i,j,n;
HashTable HT[m];
for(i=0;i HT[i].key=0;
cin >> n;
if(n>m) return 0;
CreateHash(HT,n);
cin >> key;
result=SearchHash(HT,key);
if(result!=-1)
cout << "search success,The key is located in "<< result+1;
else
cout << "search failed";
return 0;
}
```
答案:
第1空:HT[H0].key==NULLKEY
第2空:HT[H0].key==key
第3空:(H0+i)%m
第4空:HT[Hi].key==NULLKEY
第5空:HT[Hi].key==key
```c++
#include
using namespace std;
#define m 16
#define NULLKEY 0
struct HashTable{
int key;
};
void CreateHash(HashTable HT[],int n);//实现细节隐藏
int SearchHash(HashTable HT[],int key){
int H0=key%13;
int Hi;
if (@@[HT[H0].key==NULLKEY](2)) return -1;
else if (@@[HT[H0].key==key](2)) return H0;
else{
for(int i=1;i
if (@@[HT[Hi].key==NULLKEY](2)) return -1;
else if (@@[HT[Hi].key==key](2)) return Hi;
}
return -1;
}
}
int main()
{ int value,key;
int result;
int i,j,n;
HashTable HT[m];
for(i=0;i
cin >> n;
if(n>m) return 0;
CreateHash(HT,n);
cin >> key;
result=SearchHash(HT,key);
if(result!=-1)
cout << "search success,The key is located in "<< result+1;
else
cout << "search failed";
return 0;
}
```
答案:
第1空:HT[H0].key==NULLKEY
第2空:HT[H0].key==key
第3空:(H0+i)%m
第4空:HT[Hi].key==NULLKEY
第5空:HT[Hi].key==key