C语言实现哈希算法判断该字符串是否出现在数组当中,如果出现,它的下标是多少?

本文展示了一个使用哈希函数实现的字符串查找程序。程序首先定义了一个哈希函数`hash`,用于计算字符串的哈希值。接着,程序创建了一个字符串数组,并为每个字符串计算哈希值,存储在哈希表中。当用户输入一个字符串时,程序会检查这个字符串的哈希值是否在哈希表中,从而判断字符串是否存在于原始数组中。这是一个基本的哈希查找算法实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXKEY 10
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;
}
int main()
{
	/*
	2 往一个字符串数组当中插入20个不同的字符串,然后输入一个字符串,
	使用下列哈希算法判断该字符串是否出现在数组当中,
	如果出现,它的下标是多少?
	*/
	char *arr[6] = { "abc","ccc","zzz","wocao","啊啊啊","caixukun" };
	char *hashTable[MAXKEY] = { 0 };//用于存储哈希值
	int i;
	for (i = 0; i < 6; i++)
	{
		//将哈希函数计算的下标,返回值作为hashTable的下标,如果出现过就赋值为1
		
		int 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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值