利用C++,不用类函数编程实现散列表的应用(可根据实际情况进行调整) 选择合适散列函数和冲突处理方法,编程实现QQ账户的申请与登录。
时间: 2023-06-25 08:05:28 浏览: 97
以下是一个简单的散列表的实现,包括哈希函数和拉链法解决冲突。这里我们使用了C++11的unordered_map来实现散列表,代码如下:
```c++
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
// 定义哈希函数
int HashFunc(string key)
{
int hash = 0;
for (char c : key) {
hash = (hash * 31 + c) % 100;
}
return hash;
}
// 定义用户结构体
struct User {
string username;
string password;
};
int main()
{
// 创建散列表
unordered_map<int, User> users;
// 注册用户
User user1 = { "Alice", "123456" };
int hash1 = HashFunc(user1.username);
users[hash1] = user1;
User user2 = { "Bob", "654321" };
int hash2 = HashFunc(user2.username);
users[hash2] = user2;
// 登录用户
string username, password;
cout << "请输入用户名:";
cin >> username;
cout << "请输入密码:";
cin >> password;
int hash = HashFunc(username);
if (users.count(hash) == 0) {
cout << "该用户不存在!" << endl;
}
else {
User user = users[hash];
if (user.password == password) {
cout << "登录成功!" << endl;
}
else {
cout << "密码错误!" << endl;
}
}
return 0;
}
```
在这个例子中,我们使用了一个简单的哈希函数,将用户名转换成一个整数值。然后,我们使用unordered_map来创建散列表,并将用户的信息存储在其中。在登录时,我们使用相同的哈希函数来查找用户,并检查输入的密码是否正确。
这只是一个简单的例子,实际应用中可能需要更复杂的哈希函数和冲突处理方法。但是,这个例子可以帮助你了解散列表的基本思想和实现方法。
阅读全文