您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 数据结构-C++-简单英汉字典-实验报告
2011年12月22日星期四1实验报告:简单英汉字典2011-12-222011年12月22日星期四2实现目标及要求:1)利用散列表实现英汉字典;2)实现散列表类,要求实现一种散列表:•散列函数选取建议:将单词转成整数,再用除留余数法获得散列地址。•冲突解决方法可采用开散列法。3)实现字典类,字典数据存放在内存,字典类中有两个重要数据成员:•字典数组:存放字典数据的数组(或线性表)。•散列表对象:作为字典数据索引的散列表。–散列表元素结构包含单词和对应字典数据在字典数组中的下标,可通过散列表直接获得单词在字典数组的下标。4)利用上面两个类实现英汉字典。5)界面要求:键盘输入单词,屏幕输出解释:–界面菜单项:•1.添加新词•2.删除单词•3.查字典–查字典界面:•请输入英文单词:China•中文翻译:中国2011年12月22日星期四3实验环境与工具:使用MicrosoftVisualStudio2010在Windows764位环境下进行实验。实验思路:分如下N步:1.先实现链结点类的结构。2.实现字典类的结构。3.实现词条类的结构。4.实现词条的散列表分类方法。5.整合功能。2011年12月22日星期四4主要的数据结构如下://Hash_head.h#includeassert.h#includestring#includestdlib.husingnamespacestd;constintdefaultDicSize=10;constintdefaultTableSize=10;classChainNode{public:EntrystringEntryLink;ChainNode*link;};templateclassEclassDictionary{public:Dictionary(Ee[]);~Dictionary(){delete[]ht;}boolsearch(string,string&);boolsearch(string,string&,ChainNode*&);boolinsert(E);boolinsert(string,string);boolremove(string);voiddicPos(Ee[]);voidoutputDic();private:ChainNode*ht;intdicSize;//总词条数inttableSize;//每个索引容量};templateclassEDictionaryE::Dictionary(Ee[]){//计算词条数,作为字典最大长度dicSize=0;while(e[dicSize].chinese!=){dicSize++;}//初始化字典2011年12月22日星期四5ht=newChainNode[dicSize];for(inti=0;idicSize;i++){ht[i].link=NULL;ht[i].EntryLink=Entrystring();}}templateclassEvoidDictionaryE::dicPos(Ee[]){inti;ChainNode*p;for(i=0;idicSize;i++){insert(e[i]);}}templateclassEboolDictionaryE::insert(Eent){intk;ChainNode*p1,*p2;tableSize=5;k=ent.firstLetter()%tableSize;p1=&ht[k];if(p1-link!=NULL){p1=p1-link;while(p1-link!=NULL){p1=p1-link;}}p2=newChainNode;p2-EntryLink=ent;p2-link=NULL;p1-link=p2;return0;}templateclassEboolDictionaryE::insert(stringstr1,stringstr2){Entrystring*e=newEntrystring(str1,str2);2011年12月22日星期四6insert(*e);return1;}templateclassEvoidDictionaryE::outputDic(){inti;ChainNode*p1;for(i=0;itableSize;i++){//cout************************************endl;//coutiendl;//cout****endl;if(ht[i].link!=NULL){p1=&ht[i];while(p1-link!=NULL){p1=p1-link;p1-EntryLink.output();}}}//cout************************************endl;}templateclassEboolDictionaryE::remove(stringstr){stringresult;ChainNode*ptr;if(search(str,result,ptr)==1){ptr-link=ptr-link-link;return1;}else{return0;}}templateclassEboolDictionaryE::search(stringstr,string&result){ChainNode*ptr;returnsearch(str,result,ptr);}templateclassE2011年12月22日星期四7boolDictionaryE::search(stringstr,string&result,ChainNode*&ptr){intk;ChainNode*p1,*p2;EntrystringstrEnt(str);k=strEnt.firstLetter()%dicSize;p1=&ht[k];if(p1-link!=NULL){do{ptr=p1;p1=p1-link;if(p1-EntryLink.word==strEnt.word){result=p1-EntryLink.chinese;return1;}}while(p1-link!=NULL);return0;}else{return0;}}//Entry_head.h#includeassert.h#includestring#includestdlib.husingnamespacestd;templateclassKclassEntry{public:Kword;Kchinese;public:Entry(K,K);Entry();Entry(K);voidoutput();intfirstLetter();};templateclassKEntryK::Entry(Kw,Kc){2011年12月22日星期四8word=w;chinese=c;};templateclassKEntryK::Entry(){word=;chinese=;};templateclassKEntryK::Entry(Kw){word=w;chinese=;};templateclassKvoidEntryK::output(){cout英文:wordendl;cout中文:chineseendlendl;}templateclassKintEntryK::firstLetter(){char*strv=strdup(word.c_str());//stringתcharreturnint(strv[0]);}主要代码结构://Hash_main.cpp#includeiostream#includestring#includeEntry_head.h#includeHash_head.husingnamespacestd;constintdeafaultSize=10+1;intmain(){cout********************************************endl;cout**********endl;2011年12月22日星期四9cout*****大猫哥*****endl;cout*****MakeByLJDe.de*****endl;cout*****E-mail:LJDede@yeeyee.net*****endl;cout**********endl;cout********************************************endl;Entrystringe[deafaultSize]={Entrystring(eliminate,消除),Entrystring(accommodation,招待设备),Entrystring(convince,使确信),Entrystring(conscience,良心),Entrystring(lantern,灯笼),Entrystring(procession,队伍),Entrystring(quit,离开),Entrystring(pudding,布丁),Entrystring(reaction,反应),Entrystring(shrink,收缩),Entrystring()};DictionaryEntrystringdic(e);intdeed;stringstr1,str2;Entrystring*eLit;dic.dicPos(e);do{coutendl****************************************************************************endl;cout1.查看已有的字典词条。endl;cout2.添加新的词条到字典。endl;cout3.删除已有词条。endl;cout4.查字典。endl;cout5.清屏。endl;cout6.退出程序。endl;cout****************************************************************************endl;cout请选择你要进行的操作:;cindeed;cout你选择的操作是:deedendl;switch(deed){2011年12月22日星期四10case1:coutendl****************************************************************************endl;dic.outputDic();break;case2:coutendl****************************************************************************endl;cout请输入新词条的key,为英文:;cinstr1;coutendl;cout请输入该词条的value,为中文:;cinstr2;coutendl;dic.insert(str1,str2);cout你输入的词条为:endlendl;eLit=newEntrystring(str1,str2);eLit-output();break;case3:coutendl************************************************
本文标题:数据结构-C++-简单英汉字典-实验报告
链接地址:https://www.777doc.com/doc-6234226 .html