C语言运用哈希表的知识建立一个个人电话号码查询的系统
时间: 2024-12-17 08:43:29 浏览: 9
在C语言中,要建立一个个人电话号码查询系统,我们可以利用哈希表(通常称为关联数组或字典)数据结构,因为它允许快速查找和插入数据。下面是一个简单的步骤说明:
首先,你需要定义一个结构体来存储电话号码和对应的联系人姓名,例如:
```c
typedef struct {
char* name;
char* phone_number;
} Contact;
```
接着,你可以创建一个哈希表,比如使用`unsigned int`作为键,`Contact`作为值。一种简单的方式是使用`strlen()`函数获取字符串长度,然后用这个长度作为哈希值:
```c
#include <stdlib.h>
#define TABLE_SIZE 100
Contact* contacts[TABLE_SIZE];
int hash(char* key) {
unsigned int hash_value = 5381; // 雪崩法哈希算法的基础
for (char* c = key; *c != '\0'; ++c)
hash_value = ((hash_value << 5) + hash_value) + (*c);
return hash_value % TABLE_SIZE;
}
```
添加新的联系人时,先计算哈希值,然后将数据插入对应的位置:
```c
void add_contact(char* name, char* phone_number) {
Contact* new_contact = (Contact*)malloc(sizeof(Contact));
if (new_contact) {
new_contact->name = strdup(name);
new_contact->phone_number = strdup(phone_number);
contacts[hash(phone_number)] = new_contact;
}
}
```
查询时,同样计算哈希值,然后搜索该位置的数据:
```c
Contact* find_contact(char* phone_number) {
int index = hash(phone_number);
if (contacts[index]) {
return contacts[index];
} else {
return NULL;
}
}
```
最后,记得在程序结束时释放所有动态分配的内存:
```c
void free_contacts() {
for (int i = 0; i < TABLE_SIZE; i++) {
Contact* contact = contacts[i];
if (contact) {
free(contact->name);
free(contact->phone_number);
free(contact);
contacts[i] = NULL;
}
}
}
```
这就是一个基础的电话簿查询系统的概览。实际项目中,可能需要考虑负载因子、冲突处理以及线程安全等问题。
阅读全文