#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 1
#define UNSUCCESS 0
#define DUPLICATE -1
#define NULLKEY -1
#define OK 1
#define EQ(x,y) ((x) = (y))
#define LT(x,y) ((x) < (y))
#define LE(x,y) ((x) <= (y))
int hashSize[] = { 997,1999,11999};
typedef struct{
int key;
int data;
}ElemType;
typedef struct{
ElemType * elem;
int count;
int sizeindex;
}HashTable;
int hash(int k)
{
return (k % 1000);
}
void collision(int &p,int&c)
{
p = hash(p + c*c);
}
int searchHash(HashTable h,int k,int &p,int &c)
{
p = hash(k);
while(h.elem[p].key != NULLKEY && !EQ(k,h.elem[p].key))
collision(p,++c);
if(EQ(k,h.elem[p].key))
return SUCCESS;
else return UNSUCCESS;
}
int insertHash(HashTable &h,ElemType e)
{
int p=0,c=0;
if(searchHash(h,e.key,p,c))
return DUPLICATE;
else if(c < hashSize[h.sizeindex ]/2){
h.elem[p] = e;
++h.count;
return OK;
}
else{
return UNSUCCESS;
}
}
int main()
{
HashTable ht;
ht.sizeindex = 0;
ht.count = 0;
ht.elem = (ElemType *)malloc(sizeof(ElemType) * 1000);
for(int i = 0;i < hashSize[ht.sizeindex];i++)
ht.elem[i].key = NULLKEY;
ElemType et = {123,1111};
insertHash(ht,et);
int k=124,p=-1,c=0;
searchHash( ht, k, p, c);
printf("%d\n",p);
system("pause");
}