使用Hash表实现英文单词表并实现单词查询操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Hash表实现英文单词表并实现单词查询操作相关的知识,希望对你有一定的参考价值。

使用Hash表实现英文单词表并实现单词查询操作:
给定单词查询其英文翻译:
(1) 构造用于存放英文单词表的散列表结构:定义Hash函数;使
用开散列法处理冲突;
(2) 英文单词表在附件文本中,从文件读入,一行一条。每一行
前半部分为英文单词本身,后半部分为中文翻译,两部分之间用tab字
符隔开(’\t’)。注意英文单词中可能有空格;
提供用户单词查询操作:根据输入的英文单词,给出对应的中文翻译。

操作平台:VC6.0
英文单词表的txt文件格式如下:
Swimming 游泳
swimming pool 游泳池
changing room 更衣室
shower 淋浴
spaning platform 跳台
ten-meter platform 10米跳台
five-meter platform 5米跳台
three-meter springboard 3米跳板
one-meter springboard 1米跳板
spaning pool 跳水池
non-swimmer's pool 浅水池
swimmer's pool 深水池
starting block 出发台
starting spane 出发起跳
rope with cork floats 水线
swimming lane 泳道
touching the finishing line 终点触线
timekeeper 计时员
lifesaver 救生员
land drill 陆上练习
breaststroke 蛙泳
crawl stroke 爬泳
back stroke 仰泳
side stroke 侧泳
butterfly stroke 蝶泳
dolphin butterfly stroke 海豚式蝶泳
treading water 踩水
underwater swimming 潜泳
swimming pool with artificial waves 人工海浪泳池
artificial waves 人工海浪
swimming trunks 泳裤
swimsuit 泳衣
swimming cap 泳帽
bikini 比基尼泳衣
bikini bottom 比基尼式泳裤
surfing 冲浪
surfboard 冲浪板
water ski 滑水橇

请帮忙写出完整的代码,非常感谢,这个对我来说实在太复杂了,所以只能找高人求教了。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100//散列表长度
struct Node

char* key; char* val;
Node* next;
*heads[N];//散列表,用链处理冲突
int hash(char* key)//散列函数

unsigned long h=0;
while(*key)

h=(h<<4)+*key++;
unsigned long g=h & 0xF0000000L;
if(g)
h^=g>>24;
h&=~g;

return h&N;

Node* find(char* key)//查找

Node* cur=heads[hash(key)];
while(cur)

if(!strcmp(cur->key,key))
return cur;
cur=cur->next;

return NULL;

void insert(char* key,char* val)//插入

int i=hash(key);
Node* head=heads[i];
if(find(key)==NULL)

Node* tmp=(Node*)malloc(sizeof(Node));
tmp->key=(char*)malloc(strlen(key)+1);
tmp->val=(char*)malloc(strlen(val)+1);
strcpy(tmp->key,key);
strcpy(tmp->val,val);

tmp->next=head;
heads[i]=tmp;


main()

char tmp[100],*key,*val;
Node* cur;
FILE *fp=fopen("abc.txt","r");
if(fp==NULL)

printf("打开文件有问题\n");
exit(1);

while(fgets(tmp,100,fp)!=NULL)

if(tmp[strlen(tmp)-1]=='\n')
tmp[strlen(tmp)-1]='\0';
key=strtok(tmp,"\t");
val=strtok(NULL,"\t");
insert(key,val);


printf("输入你要查找的单词:\n");
while(gets(tmp))

cur=find(tmp);
if(cur==NULL)
printf("没找到\n");
else
printf("%s\n",cur->val);



参考技术A 使用 DB2 索引扩展实现基本文本索引
http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0805stolze2/index.html

实现对哈希表的应用—是关于对小集体的查询.zip
http://www.pudn.com/upload_log.asp?e=minyo072187*sina.com
参考技术B 使用 DB2 索引扩展实现基本文本索引
http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0805stolze2/index.html

实现对哈希表的应用—是关于对小集体的查询.zip
http://www.pudn.com/upload_log.asp?e=minyo072187*sina.com
1) 构造用于存放英文单词表的散列表结构:定义Hash函数;使
用开散列法处理冲突;
(2) 英文单词表在附件文本中,从文件读入,一行一条。每一行
前半部分为英文单词本身,后半部分为中文翻译,两部分之间用tab字
符隔开(’\t’)。注意英文单词中可能有空格;
提供用户单词查询操作:根据输入的英文单词,给出对应的中文翻译。

操作平台:VC6.0
英文单词表的txt文件格式如下:
Swimming 游泳
swimming pool 游泳池
changing room 更衣室
shower 淋浴
spaning platform 跳台
ten-meter platform 10米跳台
five-meter platform 5米跳台
three-meter springboard 3米跳板
one-meter springboard 1米跳板
spaning pool 跳水池
non-swimmer's pool 浅水池
swimmer's pool 深水池
starting block 出发台
starting spane 出发起跳
rope with cork floats 水线
swimming lane 泳道
touching the finishing line 终点触线
timekeeper 计时员
lifesaver 救生员
land drill 陆上练习
breaststroke 蛙泳
crawl stroke 爬泳
back stroke 仰泳
side stroke 侧泳
butterfly stroke 蝶泳
dolphin butterfly stroke 海豚式蝶泳
treading water 踩水
underwater swimming 潜泳
swimming pool with artificial waves 人工海浪泳池
artificial waves 人工海浪
swimming trunks 泳裤
swimsuit 泳衣
swimming cap 泳帽
bikini 比基尼泳衣
bikini bottom 比基尼式泳裤
surfing 冲浪
surfboard 冲浪板
water ski 滑水橇
参考技术C 建议去专业论坛去问吧,比如csdn(http://www.csdn.com/)等 参考技术D 对你给出的文件处理还简单些,如果是很多的单词要处理就要动态分配了。

此文件共38个单词,建立散列表,取负载因子=0.7,因此散列表大小38/0.7=54,大于54的质数57。
先读入一行英文单词,处理分成几个单词,对每个单词取固定位数返回位置,如此位置表内为空,就写入。

有必要加我。

以上是关于使用Hash表实现英文单词表并实现单词查询操作的主要内容,如果未能解决你的问题,请参考以下文章

创建一个链表并实现数据统计。函数WORD *create(char *a[][20],int n) 创建一个包含n个结点的单向链表,结点数据来自a所指向的数组中存储的n个单词(字符串)。 函数void

css实现的将英文单词进行大小写转换代码实例

LUA实现单词替换功能

HashMap原理分析

Java实现英语文章词频统计

实现高效的英文单词前缀匹配