周立功来讲解哈希表的实现
近日周立功教授公开了数年的心血之作《程序设计与数据结构》,电子版已无偿性分享到电子工程师与高校群体下载,经周立功教授授权,特对本书内容进行连载。
>>>> 1.1.1 哈希表的实现
1. 初始化
hash_db_init()接口用于哈希表实例的初始化,在定义哈希表结构体类型时,哈希表数组大小、记录长度、关键字长度和哈希函数都需要由用户根据实际情况确定,其函数原型定义如下(hash_db.h):
int hash_db_init (
hash_db_t *p_hash, // 指向哈希表实例的指针
unsigned int size, // 哈希表大小
unsigned int key_len, // 关键字长度
unsigned int value_len, // 记录长度
hash_func_t pfn_hash); // 哈希函数在这里,以学生记录为例,创建一个大小为250组的哈希表:
hash_db_t hash_students;
hash_db_init(
&hash_students,
250, // 大小为250
6, // 关键字长度为6字节
sizeof(student_t), // 记录的长度
(hash_func_t)db_id_to_idx); // 哈希函数在初始化函数的实现中,需要按照size指定的大小分配内存,用于存储哈希表的各个表项(链表头),接着需要完成各个链表头和结构体成员的初始化,初始化函数的实现范例详见程序清单3.63。
程序清单3.63 初始化函数范例程序
1 int hash_db_init (hash_db_t *p_hash, unsigned int si
- 电源软启动的实用设计技巧(07-16)
- 周立功:动态分布内存——malloc()函数与calloc()函数(07-22)
- 周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数(07-25)
- 周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写(07-30)
- 周立功教你学C语言编程:教你数组是如何保存指针的(07-31)
- 算法的泛化问题,这些坑你可能都经历过!|周立功教你学软件设计(08-01)