n;switch (n){case 1: BitreeLocateMenu();//二叉排序树查找菜单break;//退出switchca。数据结构 C++实现 基于不同策略的英文单词的词频统计和检索系统( 七 )。" />

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


7、二叉排序树菜单
// 二叉排序树菜单void BiTreeMenu(){while(true){system("cls"); //清屏cout << "*******************基于不同策略的英文单词的词频统计和检索系统*******************" << endl;cout << "---二叉排序树查找---" << endl;cout << "1.二叉排序树的顺序查找" << endl;cout << "2.返回上一级" << endl;cout << "请按相应的数字键进行选择:" << endl;int n;cin >> n;switch (n){case 1: BitreeLocateMenu();//二叉排序树查找菜单break; //退出switchcase 2: return; //退出函数default:cout << "输入的不是有效符号,请重新输入" << endl; system("pause"); //暂停} //switch} //while}//二叉排序树的顺序查找菜单void BitreeLocateMenu(){BiSortTree B(WF,sum);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: B.printf(); break;case 2: BitreeWordLocMenu(); //二叉排序树查找单词菜单break;case 3:return; //退出函数default: cout << "输入的不是有效符号,请重新输入" << endl; system("pause"); //暂停} //switch} //while}//二叉排序树查找单词菜单void BitreeWordLocMenu(){BiSortTree B(WF,sum);system("cls"); //清屏cout << "*******************基于不同策略的英文单词的词频统计和检索系统*******************" << endl;cout << "---二叉排序单词查找---" << endl;cout << "请输入要查找的单词:";string word;cin >> word;auto start = system_clock::now(); //开始时间B.SearchBST(word);duration diff = system_clock::now() - start; //现在时间 - 开始时间BiNode* p = NULL; //指针置空p = B.SearchBST(word);if (p != NULL) {cout << "此单词为:" << p->data.word << endl;cout << "此单词的词频:" << p->data.frequency << endl;cout << "查找该单词所花费的时间:" << (diff.count())*1000 << "毫秒" << endl;cout << "平均查找长度:" << sum << endl;} //ifelsecout << "查找失败" << endl;system("pause"); //暂停}
8、开放地址哈希表类
//开放地址哈希表类class HashTable {public:HashTable(); //构造函数,初始化空散列表~HashTable() {}; //析构函数int Insert(datatype a); //插入int Search(string word); //查找datatype Get(int a);void Print(); //输出private:int H(int k); //哈希函数(散列函数)datatype ht[MaxSize]; //散列表};//构造函数HashTable::HashTable() {for (int i = 0; i < MaxSize; i++) {ht[i].key = 0; //关键码初始化ht[i].word = "";ht[i].frequency = 0; // 0表示该散列单元为空} //for}//哈希函数,除留余数法int HashTable::H(int k) {return k % MaxSize;}//输出函数void HashTable::Print() {system("cls"); //清屏ofstream fout; //文件写操作 内存写入存储设备fout.open("outfile5.txt"); //打开文件fout << "单词总数为:" << sum << endl;fout << "词频" << "\t" << "单词" << endl;for (int i = 0; i < sum; i++) {fout << WF[i].frequency << "\t" << WF[i].word << endl;cout << WF[i].frequency << "\t" << WF[i].word << endl;} //forsystem("pause"); //暂停}//查找函数int HashTable::Search(string word) {int key = WordTransitionKey(word); //将单词转化为关键码int i = H(key); //计算散列地址,设置比较的起始位置while (ht[i].key != 0) {if (ht[i].word == word)return i;//查找成功elsei = (i + 1) % MaxSize; //向后探测一个位置} //whilereturn 0; //查找失败}//插入函数int HashTable::Insert(datatype f_word_key) {int key = WordTransitionKey(f_word_key.word);//将单词转化为关键码int i = H(key);//计算散列地址,设置比较的起始位置while (ht[i].key != 0) { //寻找空的散列单元i = (i + 1) % MaxSize; //向后探测一个位置} //whileht[i].key = key; //关键码赋值ht[i].word = f_word_key.word; //单词赋值ht[i].frequency = f_word_key.frequency; //词频赋值return i; //返回插入位置 }//获取单词以及频率datatypeHashTable::Get(int a) {return ht[a];}