基于哈希表电话溥c语言
时间: 2024-06-18 22:04:39 浏览: 9
哈希表是一种常用的数据结构,可以用来快速查找数据。在电话簿这个场景中,可以使用哈希表来实现电话簿的存储和查找。在C语言中,可以通过定义结构体和使用指针来实现哈希表。
具体实现方式如下:
1. 定义一个结构体,包含电话号码和姓名等信息。
2. 定义一个哈希表结构体,包含哈希表的大小、每个桶的大小、每个桶的指针等信息。
3. 实现哈希函数,将电话号码转换成桶的索引。
4. 实现插入函数,将电话号码和姓名插入到哈希表中对应的桶中。
5. 实现查找函数,根据电话号码在哈希表中对应的桶中查找对应的姓名。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1000 // 哈希表最大大小
#define BUCKET_SIZE 10 // 每个桶最大大小
// 电话簿结构体
typedef struct {
char name[20]; // 姓名
char phone[20]; // 电话号码
} PhoneBook;
// 哈希表桶结构体
typedef struct {
int size; // 当前桶大小
PhoneBook *data[BUCKET_SIZE]; // 桶数据
} Bucket;
// 哈希表结构体
typedef struct {
int size; // 哈希表大小
Bucket *buckets[MAX_SIZE]; // 哈希表桶数组
} HashTable;
// 哈希函数,将电话号码转换成桶的索引
int hash(char *phone, int size) {
int sum = 0;
for (int i = 0; i < strlen(phone); i++) {
sum += phone[i];
}
return sum % size;
}
// 初始化哈希表
void initHashTable(HashTable *hashTable, int size) {
hashTable->size = size;
for (int i = 0; i < size; i++) {
Bucket *bucket = (Bucket *)malloc(sizeof(Bucket));
bucket->size = 0;
for (int j = 0; j < BUCKET_SIZE; j++) {
bucket->data[j] = NULL;
}
hashTable->buckets[i] = bucket;
}
}
// 插入函数,将电话号码和姓名插入到哈希表中对应的桶中
void insert(HashTable *hashTable, char *name, char *phone) {
int index = hash(phone, hashTable->size);
Bucket *bucket = hashTable->buckets[index];
PhoneBook *phoneBook = (PhoneBook *)malloc(sizeof(PhoneBook));
strcpy(phoneBook->name, name);
strcpy(phoneBook->phone, phone);
if (bucket->size < BUCKET_SIZE) {
bucket->data[bucket->size] = phoneBook;
bucket->size++;
}
}
// 查找函数,根据电话号码在哈希表中对应的桶中查找对应的姓名
char *find(HashTable *hashTable, char *phone) {
int index = hash(phone, hashTable->size);
Bucket *bucket = hashTable->buckets[index];
for (int i = 0; i < bucket->size; i++) {
if (strcmp(bucket->data[i]->phone, phone) == 0) {
return bucket->data[i]->name;
}
}
return NULL;
}
// 测试代码
int main() {
HashTable hashTable;
initHashTable(&hashTable, MAX_SIZE);
insert(&hashTable, "张三", "123456");
insert(&hashTable, "李四", "234567");
insert(&hashTable, "王五", "345678");
char *name = find(&hashTable, "234567");
if (name != NULL) {
printf("姓名:%s\n", name);
} else {
printf("未找到该电话号码\n");
}
return 0;
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)