【发布时间】:2015-02-23 23:22:08
【问题描述】:
我正在编写一个哈希表,并且我正在使用一个不透明的指针来管理这个 ADT。 这就是我的代码的样子:
hash_table.h
typedef struct hash_table *Hash_table;
Hash_table hash_table_init(int size, int(*compare)(void *key_a, void *key_b), int(*hash)(void *key, int size));
void hash_table_insert(Hash_table ht, void *item);
void* hash_table_search(Hash_table ht, void *key);
void hash_table_start_iteration(Hash_table ht);
void* hash_table_get_next_item(Hash_table ht);
void hash_table_destroy(Hash_table ht);
hash_table.c
#include <stdlib.h>
#include "hash_table.h"
struct hash_table{
void *v; //array of items (created with a malloc)
int n; //array size
int iterator; //iterator to retrive all the items
int (*compare)(void*, void*); //compare function
int (*hash)(void*, int); //hash function
};
Hash_table hash_table_init(int size, int(*compare)(void *key_a, void *key_b), int(*hash)(void *key, int size))
{...}
void hash_table_insert(Hash_table ht, void *item)
{...}
void* hash_table_search(Hash_table ht, void *key)
{...}
void hash_table_start_iteration(Hash_table ht)
{
ht->iterator = 0;
}
void* hash_table_get_next_item(Hash_table ht)
{
if(ht->iterator >= ht->n) return NULL;
return v[ht->iterator++];
}
void hash_table_destroy(Hash_table ht)
{...}
这是我编写的“for each”函数的代码。 它工作得很好,但我真的不喜欢它,我认为这不是一个优雅的代码。
如何以更好的方式执行此操作? 提前致谢
【问题讨论】:
-
ADT?那是什么,ADT标签是用于“android开发工具”的,如果它是某种数据结构,你可能需要拼出来......
-
抱歉,ADT 的意思是“抽象数据类型”。我现在改了
-
您如何确定建议是否“更好”?
-
我不喜欢我有两个函数,我更喜欢一个 foreach 函数。也许使用宏我可以做到这一点,但我真的不知道怎么做。
标签: c hashtable abstract-data-type