uva 10282 初学哈希入门题

转载请注明出处,谢谢!

http://blog.csdn.net/monkeyduck

题目比较简单,哈希函数也不需要怎么设计,不追求完全没有冲突的话就随便算就可以了,然后加入哈希表和查找表的时候对应好。

比较关键的一个地方是word和dic数组的下标不要从0开始哦!

#include<iostream>
#include<cstring>
using namespace std;

const int MAX=100003;
char word[MAX][11],dic[MAX][11];
int head[MAX],nextpos[MAX];

int calhash(char c[])
{
	int len = strlen(c);
	int sum = 0;
	for (int i=0;i<len;i++)
	{
		sum=sum*7+(c[i]-'a');
	}
	return sum%MAX;
}
void insert_table(int s,char ch[])
{
	int h=calhash(ch);
	nextpos[s]=head[h];
	head[h]=s;
}
int findstr(char ch[])
{
	int h=calhash(ch);
	int u=head[h];
	while (u)
	{
		if (strcmp(ch,dic[u])==0)
			return u;
		u=nextpos[u];
	}
	return 0;
}
void print(int u)
{
	int len = strlen(word[u]);
	for (int i=0;i<len;i++)
		cout<<word[u][i];
	cout<<endl;
}
int main ()
{
	char line[30];
	
	int dex=1;
	while (cin.getline(line,30)&&line[0]!='\0')
	{
		int i=0,j=0;
		while (line[i]!=' ')
		{
			word[dex][i]=line[i];
			i++;
		}
		word[dex][i++]='\0';
		while (line[i]!='\0')
		{
			dic[dex][j++]=line[i++];
		}
		dic[dex][j]='\0';
		insert_table(dex,dic[dex]);
		dex++;
	}
	while  (1)
	{
		char tar[11];
		cin.getline(tar,11);
		if (tar[0]=='\0') break;
		int flag=findstr(tar);
		if (flag>0)
			print(flag);
		else cout<<"eh"<<endl;
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值