数据结构报告—实现对字典的查找

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告

主题:实现字典的查找

学号:

班级:191142

姓名:

指导老师:

内容概要

(1)题目要求;

(2)实现字典的查找的要点;

(3)函数模块及各函数可实现的功能简介;(4)具体的源代码;

(5)使用说明;

(6)实验心得;

一:题目要求如下:

采用分块查找,哈希表查找,二叉排序树查找等不同方法实现对字典的查找,并分析不同查找方法的效率。

二:构思要点:

1.定义一个Dictionary 结构:里面包含单词和单词意义属性:

struct Dictionary{

string word;

string para;

};

2.定义一个管理器类Manage,里面包含Dictionary类型的向量容器,和读取dictionary.txt的Readtxt(),以及二叉搜索树查找BiSearchTreesearch(),分块查找Blocksearch()和哈希表查找HashTablesearch()等功能函数:

class Manage{

private:

vector Dic;

public:

void Readtxt();

void BiSearchTreesearch();

void Blocksearch();

void HashTablesearch();

};

3.各个功能函数的详细代码:

void Manage::Readtxt():读取dictionary.txt里的单词表

void Manage::Readtxt(){

int i = 0;

string a, b;

Dictionary d;

ifstream ifile;

ifile.open("dictionary.txt"); //打开文件

if (!ifile){

cout << "无法打开dictionary.txt!" << endl;

exit(1);

}

while (ifile.eof() != 1){

ifile >> a >> b;

d.word = a;

d.para = b;

Dic.push_back(d);

i++;

}

ifile.close();

}

void Manage::HashTablesearch():哈希表查找函数

void Manage::HashTablesearch(){

string word;

cout << "请输入你要查找的单词:" << endl;

cin >> word;

HashTable myHashTable(1.7*(int)Dic.size());

string b[2025];

for (int i = 0; i < (int)Dic.size(); i++)

b[i] = Dic[i].word;

DataType a[2025];

for (int i = 0; i < (int)Dic.size(); i++)

a[i] = b[i];

for (int i = 0; i < (int)Dic.size(); i++)

myHashTable.Insert(a[i]);

string k = myHashTable.IsIn(word);

if (k == "字典中没有这个单词!")

cout << k << endl;

else{

for (int i = 0; i < (int)Dic.size(); i++){

if (Dic[i].word == k){

cout << "查找成功,其位置为:" << i << endl; /*如果找到该数,则输出其位置*/

cout << Dic[i].word << '\t' << Dic[i].para << endl;

}

}

}

}

void Manage::Blocksearch():实现分块查找函数

void Manage::Blocksearch(){

int j = 0, k;

string key;

string a[2025];

for (int i = 0; i < (int)Dic.size(); i++)

a[i] = Dic[i].word;

for (int i = 0; i <= 24; i++){

index_table[i].start = j; /*确定每个块范围的起始值*/

index_table[i].end = j + 81 - 1; /*确定每个块范围的结束值*/

j = j + 81;

index_table[i].key = a[index_table[i].end]; /*确定每个块范围中元素的最大值*/ }

cout << "请输入你要查找的单词:" << endl;

cin >> key;

k = block_search(key, a); /*调用函数进行查找*/

if (k >= 0){

cout << "查找成功,其位置为:" << k << endl; /*如果找到该词,则输出其位置*/

cout << Dic[k].word << '\t' << Dic[k].para << endl;

}

else

cout << "查找失败!" << endl; /*若未找到则输出提示信息*/

}

void Manage::BiSearchTreesearch():实现二叉搜索树查找函数

void Manage::BiSearchTreesearch(){

BiSearchTree searchTree;

string a[2025];

for (int i = 0; i < (int)Dic.size(); i++)

a[i] = Dic[i].word;

for (int i = 0; i < (int)Dic.size(); i++)

searchTree.Insert(a[i]);

cout << "请输入你要查找的单词:" << endl;

string key;

cin >> key;

BiTreeNode *node = searchTree.Find(key);

if (node == NULL)

cout << "查找失败!" << endl; /*若未找到则输出提示信息*/

else{

for (int i = 0; i < (int)Dic.size(); i++){

if (Dic[i].word == node->Data()){

cout << "查找成功,其位置为::" << i << endl; /*如果找到该数,则输出其位置*/

cout << Dic[i].word << '\t' << Dic[i].para << endl;

}

}

}

}

三,程序运行截图:

相关文档
最新文档