C++哈希查找学生信息
时间: 2023-07-13 10:12:33 浏览: 87
可以使用哈希表来实现学生信息的查找,具体步骤如下:
1. 定义一个结构体来表示学生信息,包括学号、姓名、年龄、性别等属性。
2. 定义一个哈希函数,将学生信息的某个属性映射到哈希表的某个位置。
3. 定义一个哈希表结构体,包括哈希表的大小、哈希表的元素个数、哈希表数组等属性。
4. 实现哈希表的插入、删除和查找操作。对于查找操作,先根据哈希函数计算出学生信息所在的哈希表位置,然后在该位置上查找学生信息。
下面是一个简单的示例代码,实现了基于学号的哈希查找功能:
```c++
#include <iostream>
#include <string>
using namespace std;
// 定义学生信息结构体
struct Student {
int id; // 学号
string name; // 姓名
int age; // 年龄
string gender; // 性别
};
// 定义哈希表结构体
struct HashTable {
int size; // 哈希表大小
int count; // 哈希表元素个数
Student* data; // 哈希表数据数组
// 哈希函数
int hash(int id) {
return id % size;
}
// 插入操作
void insert(Student s) {
int pos = hash(s.id);
while (data[pos].id != -1) { // 线性探测法解决冲突
pos = (pos + 1) % size;
}
data[pos] = s;
count++;
}
// 查找操作
Student find(int id) {
int pos = hash(id);
while (data[pos].id != -1 && data[pos].id != id) { // 线性探测法查找
pos = (pos + 1) % size;
}
return data[pos];
}
// 删除操作
void remove(int id) {
int pos = hash(id);
while (data[pos].id != -1 && data[pos].id != id) { // 线性探测法查找
pos = (pos + 1) % size;
}
data[pos].id = -1; // 将该位置的学生信息标记为删除
count--;
}
};
int main() {
HashTable ht;
ht.size = 100;
ht.count = 0;
ht.data = new Student[ht.size];
for (int i = 0; i < ht.size; i++) {
ht.data[i].id = -1; // 初始化哈希表,将所有学生信息的学号设置为-1
}
// 插入学生信息
Student s1 = { 1001, "张三", 18, "男" };
Student s2 = { 1002, "李四", 19, "女" };
Student s3 = { 1003, "王五", 20, "男" };
ht.insert(s1);
ht.insert(s2);
ht.insert(s3);
// 查找学生信息
Student s = ht.find(1002);
cout << "学号:" << s.id << ",姓名:" << s.name << ",年龄:" << s.age << ",性别:" << s.gender << endl;
// 删除学生信息
ht.remove(1002);
s = ht.find(1002);
cout << "学号:" << s.id << ",姓名:" << s.name << ",年龄:" << s.age << ",性别:" << s.gender << endl;
return 0;
}
```
阅读全文