大神求解~~哈希函数怎么在C语言实现,哪位大神能看看!

#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; 
    
    
	
}


全部评论
太感谢了,查找以后就是哈希地址,真的太感谢了
点赞 回复 分享
发布于 2016-01-13 11:24
修改了下楼主的代码,不知道hash查找后的返回值要输出什么啊。。 #include<stdio.h> #include<stdlib.h> #define HASHSIZE 13 #define NULLKEY -1 typedef struct{     int* data;     int times; }HashTable; int Collision(int d){     return(d+1)%HASHSIZE; } int HashFunc(int key){     return key%HASHSIZE; } int Hashsearch(HashTable* ht,int key){     int bucket = HashFunc(key);     int addr = bucket;     while( ht->data[addr] != key && ht->data[addr] != NULLKEY){         //开放地址寻找         addr = Collision(addr);         if(addr == bucket){             //队列满             return -1;         }         }     if(ht->data[addr] != NULLKEY)         return addr;     else         return -1;   } void HashInsert(HashTable* ht,int key){     int bucket = HashFunc(key);     int addr = bucket;     while( ht->data[addr] != NULLKEY){         addr = Collision(addr);         if(addr == bucket){             printf("队列满\n");             return;         }     }     ht->data[addr] = key; } void CreateHash(HashTable*ht, int items[],int n){     int i;      ht->data = (int*)malloc(HASHSIZE * sizeof(int));     for(i=0;i<HASHSIZE;i++){         ht->data[i] = NULLKEY;     }     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++)         printf("%d\t",ht->data[i]);     printf("\n");       } int main(int argc,char *argv[]) {     int addr;     int x;     int items[6]={15,59,22,34,7,78};     HashTable ht;     CreateHash(&ht,items,6);     DisplayHash(&ht);     x=7;     addr=Hashsearch(&ht,x);     if(addr>=0)     printf("查找的元素(%d)的哈希地址为[%d]\n",x,addr);     return 0;   }
点赞 回复 分享
发布于 2016-01-13 09:23

相关推荐

10-02 19:29
已编辑
浙江科技大学 运营
点赞 评论 收藏
分享
牛客小菜鸡66:boss里面,招人的叫老板,找工作的叫牛人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务