C语言哈希查找

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXKEY 1000
typedef struct Info_s {
	int num;
	char name[30];
	int age;
	char addr[30];
}Info_t, *pInfo_t;
//哈希函数
int hash(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; //返回值范围: 0~MAXKEY-1
}
int main() {
    //建立哈希表
	pInfo_t hashTable[MAXKEY] = { NULL };
	Info_t infoArr[] = {
		1001, "Wuyifan", 30, "Canada",
		1003, "Liuhuaqiang", 45, "Shijiazhuang",
		1005, "Zhengshuang", 30, "Shenyang",
		1007, "Mayun", 50, "Hangzhou"
	};
    //准备好的数据插入哈希表
	for (int i = 0; i < sizeof(infoArr) / sizeof(Info_t); ++i) {
		int hashValue = hash(infoArr[i].name);
		hashTable[hashValue] = &infoArr[i];
	}
    //查找
	char name[30];
	while (scanf("%s", name) != EOF) {
		if (hashTable[hash(name)] == NULL) {
			printf("%s is not in array!\n", name);
		}
		else {
			printf("%d %s %d %s\n", 
				hashTable[hash(name)]->num,
				hashTable[hash(name)]->name,
				hashTable[hash(name)]->age,
				hashTable[hash(name)]->addr);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值