数据结构 C++实现 基于不同策略的英文单词的词频统计和检索系统( 九 )

<< endl;system("pause"); //暂停}//开放地址法哈希查找void OpenHashLocate(){HashTable HT;for (int i = 0; i < sum; i++)HT.Insert(WF[i]); //把数据插入到哈希表中while(true){system("cls"); //清屏cout << "*******************基于不同策略的英文单词的词频统计和检索系统*******************" << endl;cout << "---基于开放地址法的哈希查找---" << endl;cout << "1.词频统计" << endl;cout << "2.单词查找" << endl;cout << "3.返回上一级" << endl;cout << "请按相应的数字键进行选择:" << endl;int n;cin >> n;switch (n){case 1 : HT.Print(); //词频统计break;case 2 : OpenHashLocateMenu(); //开放地址法的哈希查找菜单break;case 3 :return;default: cout << "输入的不是有效符号,请重新输入" << endl; system("pause"); //暂停} //switch} //while}//链地址法哈希查找void LinkHashLocate(){HashTableLink HT;for (int i = 0; i < sum; i++)HT.Insert(WF[i]); //把数据插入到哈希表while(true){system("cls"); //清屏cout << "*******************基于不同策略的英文单词的词频统计和检索系统*******************" << endl;cout << "---基于链地址法的哈希查找---" << endl;cout << "1.词频统计" << endl;cout << "2.单词查找" << endl;cout << "3.返回上一级" << endl;cout << "请按相应的数字键进行选择:" << endl;int n;cin >> n;switch (n){case 1: HT.Print(); //词频统计break;case 2:LinkHashWordLocateMenu(); //单词查找菜单break;case 3: return; //退出函数default: cout << "输入的不是有效符号,请重新输入" << endl; system("pause"); //暂停} //switch} //while}//链地址法哈希查找菜单void LinkHashWordLocateMenu(){HashTableLink HT;for (int i = 0; i < sum; i++)HT.Insert(WF[i]); //把数据插入到哈希表double load_factor = sum / MaxSize;//散列表的装填因子system("cls");cout << "*******************基于不同策略的英文单词的词频统计和检索系统*******************" << endl;cout << "---链地址单词查找---" << endl;cout << "请输入要查找的单词:";string word;cin >> word;auto start = system_clock::now(); //开始时间HT.Search(word);duration diff = system_clock::now() - start; //现在时间 - 开始时间Node* p = HT.Search(word); //返回目标指针if (p != NULL) {cout << "此单词为:" << p->data.word << endl;cout << "此单词的词频:" << p->data.frequency << endl;cout << "查找该单词所花费的时间:" << (diff.count())*1000 << "毫秒" << endl;cout << "平均查找长度:" << 1 + (load_factor) / 2 << endl;} //ifelsecout << "查找失败" << endl;system("pause"); //暂停}
11、主菜单
//主函数int main() {ifstream fin;fin.open(file);//关联文件fileif (!fin.is_open()) {cout << "file.txt文件不存在,请检查文件名或者目录下文件是否存在 。" << endl;system("pause"); //暂停return 0;} //ifelse {cout << "file.txt文件加载中..." << endl;Sleep(1000);//延时1秒} //elseStatisticsData(); //数据统计MajorMenu();//主菜单return 0;}//主菜单void MajorMenu() {while (true) {cout << "*******************基于不同策略的英文单词的词频统计和检索系统*******************" << endl;cout << "---菜单---" << endl;cout << "1.基于线性表的查找" << endl;cout << "2.基于二叉排序树的查找" << endl;cout << "3.基于哈希表的查找" << endl;cout << "4.退出系统" << endl;cout << "请按相应的数字键进行选择:" << endl;int n;cin >> n;switch (n) {case 1:ListMenu();break;case 2:BiTreeMenu();break;case 3:HashMenu();break;case 4:cout << "系统已退出" << endl;return;default:cout << "输入的不是有效符号,请重新输入" << endl;system("cls"); //清屏system("pause"); //暂停} //switch} //for}
六、运行结果
运行结果我放在了糅合版
七、总结
通过这次实验,让我对顺序表、链表、二叉排序树、连地址哈希表和开放地址哈希表的结构有了更深刻的认识;学会如何去使用基于以上结构的顺序查找、折半查找等;还学会了如何输出查找时间以及他们的ASL(平均查找长度)