voidInitHashTable(){int i,j;for(i =0; i < P; i++){for(j =0; j < Bucket_Size; j++){
HashTable1[i].data[j]= NULL_DATA;//一个数组里存放一个桶(三个元素和指向下一个地址的桶)}
HashTable1[i].link =NULL;}}intInsertHashTable(ElemType x){int i;int index =Hash(x);for(i =0; i < Bucket_Size; i++){if(HashTable1[index].data[i]== NULL_DATA){
HashTable1[index].data[i]= x;return0;}}//一个桶满了就去创建一个桶
BucketNode* p =&(HashTable1[index]);//指针p指向第一个桶while(p->link !=NULL){
p = p->link;for( i =0; i < Bucket_Size; i++){if(p->data[i]== NULL_DATA){
p->data[i]= x;return0;}}}//创建桶并初始化
BucketNode* s =(BucketNode*)malloc(sizeof(BucketNode));for( i =0; i < Bucket_Size; i++){
s->data[i]= NULL_DATA;}
s->link =NULL;
s->data[0]= x;
p->link = s;return0;}intHash(ElemType key){return key % P;}
输出
voidshow(){int i,j;for(i =0; i < P; i++){printf("%d:", i);for(j =0; j < Bucket_Size; j++){printf("%d,", HashTable1[i].data[j]);}printf("——");if(HashTable1[i].link !=NULL){
BucketNode* p = HashTable1[i].link;while(p !=NULL){for(int k =0; k < Bucket_Size; k++){printf("%d,", p->data[k]);}printf("——");
p = p->link;}}printf("\n");}}
测试
intmain(){InitHashTable();int array[]={1,8,15,22,29,36,43,44,17,28};for(int i =0; i <sizeof(array)/sizeof(int); i++){InsertHashTable(array[i]);}show();return0;}