名表是指这样一种表:表中的每个元素由一个名字(称为关键词)加上与之一些信息构成。名表可以用一个一维数组来表示,每个元素由一个结构来表示,该结构员包含一个关键词和其他一些与该关键词相关的信息。下面是一个名表的定义: const int NAME LEN=20;const int TABLE LEN=100; struct TableItem{ char name[NAME_LEN]; /1 名表的元素类型// 关键词 ...。。.。 // 其他信息 ,TableItem name_table[TABLE_LEN];//名表用STL的容器 mep 和法 ind t实现 名表表示和查找功能写两个以上文件 代码不要全部写在mian函数里
时间: 2024-03-25 07:42:01 浏览: 77
假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数采用除留余数法构造,用线性探测再散列法处理冲突。
首先,使用STL的容器map和unordered_map实现名表表示和查找功能的代码如下:
```c++
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
const int NAME_LEN = 20;
const int TABLE_LEN = 100;
struct TableItem {
string name; // 关键词
// 其他信息 ...
};
unordered_map<string, TableItem> name_table; // 声明一个名表
int main() {
// 向名表中添加元素
TableItem item1 = {"Tom"};
name_table["Tom"] = item1;
TableItem item2 = {"Jerry"};
name_table["Jerry"] = item2;
// 查找名表中的元素
string key = "Tom";
if (name_table.find(key) != name_table.end()) {
cout << "找到了关键词为" << key << "的元素" << endl;
TableItem item = name_table[key];
// 处理item中的其他信息 ...
} else {
cout << "没有找到关键词为" << key << "的元素" << endl;
}
return 0;
}
```
其次,使用哈希表实现名表表示和查找功能的代码如下:
```c++
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int NAME_LEN = 20;
const int TABLE_LEN = 100;
struct TableItem {
string name; // 关键词
// 其他信息 ...
};
vector<TableItem> name_table[TABLE_LEN]; // 声明一个名表
// 哈希函数
int hash_func(string key) {
int sum = 0;
for (int i = 0; i < key.length(); i++) {
sum += key[i];
}
return sum % TABLE_LEN;
}
int main() {
// 向名表中添加元素
TableItem item1 = {"Tom"};
int index1 = hash_func(item1.name);
name_table[index1].push_back(item1);
TableItem item2 = {"Jerry"};
int index2 = hash_func(item2.name);
name_table[index2].push_back(item2);
// 查找名表中的元素
string key = "Tom";
int index = hash_func(key);
bool found = false;
for (int i = 0; i < name_table[index].size(); i++) {
if (name_table[index][i].name == key) {
found = true;
cout << "找到了关键词为" << key << "的元素" << endl;
TableItem item = name_table[index][i];
// 处理item中的其他信息 ...
break;
}
}
if (!found) {
cout << "没有找到关键词为" << key << "的元素" << endl;
}
return 0;
}
```
以上两种实现方式都可以实现名表的表示和查找功能。其中,使用STL的容器map和unordered_map可以简化代码,而哈希表的实现方式需要手动实现哈希函数和处理哈希冲突的方法。
阅读全文