用c语言写基于哈希表的通讯录
时间: 2024-09-26 10:09:34 浏览: 31
C语言基于哈希表实现通讯录
5星 · 资源好评率100%
在C语言中,我们可以利用哈希表(也称为关联数组)来实现一个简单的通讯录程序。哈希表通过将键值对存储在内存中的固定位置(索引),使得数据查找、插入和删除操作的时间复杂度相对较低。以下是创建一个基础的基于哈希表的通讯录结构的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 哈希函数,这里使用简单的ASCII值计算
size_t hash(const char *name) {
size_t hash = 5381;
for (int i = 0; name[i]; i++) {
hash = ((hash << 5) + hash) + name[i];
}
return hash % TABLE_SIZE; // 表大小设为一个质数,如29 或者 31
}
typedef struct Entry {
char* name;
char* phone_number;
} Contact;
#define TABLE_SIZE 29
Contact contacts[TABLE_SIZE] = {0}; // 初始化为零
int contact_count = 0;
// 插入联系人
void add_contact(char* name, char* phone_number) {
if (contact_count >= TABLE_SIZE) {
printf("通讯录已满,无法添加更多联系人\n");
return;
}
size_t index = hash(name);
contacts[index].name = name;
contacts[index].phone_number = phone_number;
contact_count++;
}
// 查找联系人
char* find_phone_number(char* name) {
size_t index = hash(name);
if (contacts[index].name && strcmp(contacts[index].name, name) == 0) {
return contacts[index].phone_number;
} else {
return NULL;
}
}
int main() {
add_contact("张三", "13812345678");
add_contact("李四", "13987654321");
char* phone = find_phone_number("张三");
if (phone) {
printf("张三的电话号码是: %s\n", phone);
}
return 0;
}
```
在这个例子中,我们创建了一个包含固定大小的`Contact`数组,并使用`add_contact`函数添加联系人,`find_phone_number`用于查询电话号码。注意,这只是一个非常基础的实现,实际应用中可能需要处理冲突(当两个名字的哈希值相同时),以及提供更好的用户界面和错误处理。
阅读全文