#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMAXKEY10inthash(char*key){int h =0, g;while(*key){
h =(h <<4)+*key++;
g = h &0xf0000000;if(g)
h ^= g >>24;
h &=~g;}return h % MAXKEY;}intmain(){/*
2 往一个字符串数组当中插入20个不同的字符串,然后输入一个字符串,
使用下列哈希算法判断该字符串是否出现在数组当中,
如果出现,它的下标是多少?
*/char*arr[6]={"abc","ccc","zzz","wocao","啊啊啊","caixukun"};char*hashTable[MAXKEY]={0};//用于存储哈希值int i;for(i =0; i <6; i++){//将哈希函数计算的下标,返回值作为hashTable的下标,如果出现过就赋值为1int b =hash(arr[i]);
hashTable[b]= i +1;}char str[20];scanf("%s", str);for(int i =0; i <6; i++){//计算输入数据的哈希值,再通过下标访问推导if(hashTable[hash(str)]!=NULL){printf("找到了");break;}else{printf("没有找到");}}printf("%d", i-1);getchar();getchar();}