#include<stdio.h>
#define HASHSIZE 13
#define DELFLAG -1
typedef struct{
	int key;
	
}DataType;
typedef struct{
	DataType data;
	int times;
}HashTable;
int Collision(int d){
	return(d+1)%HASHSIZE;
}
int HashFunc(int key){
	return key%HASHSIZE;
}
int Hashsearch(HashTable ht,DataType x){
	int addr;
	addr=HashFunc(x.key);
	while(ht[addr].data.key!=NULL&&ht[addr].data.key!=x.key)
	addr=Collision(addr);
	if(ht[addr].data.key==x.key)  return addr;
	else
	 return -addr; 
	
}
int HashInsert(HashTable ht,DataType x){
	int addr;
	addr=Hashsearch(ht,x);
	if(addr>0) return 0;
	ht[-addr].data=x;
	ht[-addr].times=1;
	return 1;
}
void CreateHash(HashTable ht, DataType items[],int n){
	int i; 
	for(i=0;i<HASHSIZE;i++){
		ht[i].data.key=NULL;
		ht[i].times=0;
	}
	for(i=0;i<n;i++)
	HashInsert(ht,items[i]);
}
void DisplayHash(HashTable ht){
	int i;
	printf("\n哈希表\n哈希地址:\t");
	for(i=0;i<HASHSIZE;i++)
	printf("%d\t",i);
	printf("\n关键字 :\t");
	for(i=0;i<HASHSIZE;i++)
	 if(ht[i].data.key!=NULL)
	  printf("%d\t",ht[i].data.key);
	 else
	  printf("\t");
	printf("\n");
	 
}
int main(int argc,char *argv[])
{
	int addr;
	DataType x;
    DataType items[6]={15,59,22,34,7,78};
    HashTable ht;
    CreateHash(ht,items,6);
    DisplayHash(ht);
    x.key=7;
    addr=Hashsearch(ht,x);
    if(addr>=0)
    printf("查找的元素(%d)的哈希地址为[%d]\n",x.key,addr);
    return 0; 
    
    
	
}
  