#include<stdio.h>
#include<stdlib.h>
#define HASH_SIZE 12
#define NULL_DATA -99
typedef struct{
int *base;//元素存储首址
int count;//元素个数
}HashTable;
void Init(HashTable *h){
h->count = 0;
h->base = (int*)malloc(HASH_SIZE*sizeof(int));
for(int i = 0; i < HASH_SIZE; i++){
*(h->base + i) = NULL_DATA;
}
}
void Insert(HashTable *h){
int d;
scanf("%d", &d);
//if(d == 0){
// return;
//}
int addr = d % HASH_SIZE;
while(*(h->base + addr) != NULL_DATA){
addr = (addr + 1) % HASH_SIZE;//开放定址法线性探测
}
*(h->base + addr) = d;
Insert(h);
}
void Search(HashTable *h){
int d;
scanf("%d", &d);
int addr = d % HASH_SIZE;
while(*(h->base + addr) != d){
addr = (addr + 1) % HASH_SIZE;
}
printf("%d", addr);
}
void main(){
HashTable h;
Init(&h);
Insert(&h);
Search(&h);
}
这是存储数据时开放定址法的主体代码
while(*(h->base + addr) != NULL_DATA){
addr = (addr + 1) % HASH_SIZE;//开放定址法线性探测
}
这是查找数据时开放定址法的主体代码
while(*(h->base + addr) != d){
addr = (addr + 1) % HASH_SIZE;
}