在 Linux 下,hlist(哈希列表)是一种高效的数据结构,用于存储和检索数据
hlist_head:#include<linux/list.h>struct my_data { int key; int value; struct hlist_node node;};struct hlist_head *my_hash_table;int hash_table_size = 1024; // 哈希表大小,可以根据需要调整初始化哈希表:my_hash_table = kcalloc(hash_table_size, sizeof(struct hlist_head), GFP_KERNEL);if (!my_hash_table) { printk(KERN_ERR "Failed to allocate memory for hash table\n"); return -ENOMEM;}定义哈希函数:static inline unsigned int my_hash_function(int key){ return (unsigned int)key & (hash_table_size - 1);}向哈希表中添加元素:void add_to_hash_table(struct my_data *data){ unsigned int index = my_hash_function(data->key); hlist_add_head(&data->node, &my_hash_table[index]);}从哈希表中删除元素:void remove_from_hash_table(struct my_data *data){ hlist_del(&data->node);}查找哈希表中的元素:struct my_data *find_in_hash_table(int key){ unsigned int index = my_hash_function(key); struct my_data *data; hlist_for_each_entry(data, &my_hash_table[index], node) { if (data->key == key) return data; } return NULL;}遍历哈希表中的所有元素:void traverse_hash_table(void){ int i; struct my_data *data; for (i = 0; i< hash_table_size; i++) { hlist_for_each_entry(data, &my_hash_table[i], node) { printk(KERN_INFO "Key: %d, Value: %d\n", data->key, data->value); } }}释放哈希表内存:void free_hash_table(void){ int i; struct my_data *data; struct hlist_node *tmp; for (i = 0; i< hash_table_size; i++) { hlist_for_each_entry_safe(data, tmp, &my_hash_table[i], node) { hlist_del(&data->node); kfree(data); } } kfree(my_hash_table);}通过这些基本操作,你可以在 Linux 下高效地使用 hlist。请注意,这里的示例代码仅作为参考,实际应用时可能需要根据具体需求进行调整。


