花了一天时间用c写了一个类似java中的HashMap接受大家的检阅解决方案

花了一天时间用c写了一个类似java中的HashMap<E,E>,接受大家的检阅
在java中像ArrayList,HashMap都是现成的,在java.util包中,用的时候直接import java.util.*就行了。

前几天写了一c版的ArrayList,同时欢迎大家指出问题:
http://topic.csdn.net/u/20120429/18/4ab4bc02-2496-4d3c-8151-1cbe51e6fe9d.html?seed=425415324&r=78416084

今天有空,也为了练习一下c,我就参照着jdk中的HashMap源码,写了一个c版的HashMap,这个HashMap多少有点泛型的特征<E>。

关于这个HashMap,现在有一个困惑,在hashmap_remove()中,要不要在返回前free()?
直接上代码,接受大家的检阅(欢迎大家指出问题):

hashmap.h
C/C++ code

#ifndef HASHMAP_H_INCLUDED
#define HASHMAP_H_INCLUDED

//HashMap中的链表
typedef struct _entry
{
    int hash;
    void *key;
    void *value;
    struct _entry *next; //单向链表

} *Entry;

//主要用于hashmap_keySet()
typedef struct _hashmapset
{
    void *key;
    struct _hashmapset *next;

} *HashMapSet;

//hashmap 结构
typedef struct _hashmap
{
    int K_E; //类似java中的泛型
    int V_E; //类似java中的泛型
    int size;
    int capacity; //当前容量
    int threshold; //门槛
    float factor; //扩展因子,当空间不够用时
    Entry table;

} *HashMap;

#ifndef E_H_INCLUDED
#define E_H_INCLUDED
enum E{E_STRING,E_INT,E_OBJECT}; //枚举类型
#endif // E_H_INCLUDED

void *hashmap_init(int k,int v); //初始化

void *hashmap_put(HashMap this,void *k,void *v); //在此映射中关联指定值与指定键。

void *hashmap_get(HashMap this,void *k); //返回指定键在此标识哈希映射中所映射的值,如果对于此键来说,映射不包含任何映射关系,则返回 null

void *hashmap_remove(HashMap this,void *k); //如果此映射中存在该键的映射关系,则将其删除。

HashMapSet hashmap_keySet(HashMap this); //返回此映射中所包含的键的 set 视图。

void hashmap_clear(HashMap this); //从此映射中移除所有映射关系。

void hashmap_free(HashMap this); //释放内存


#endif // HASHMAP_H_INCLUDED





------解决方案--------------------
感谢分享.
------解决方案--------------------
刚学完c(谭浩强版那本书),正学java中的白菜,看到Lz如此,我觉得,我连c的皮毛都没学到。帮忙顶了,感谢LZ分享,但是,我以后也会写出这般代码的!鼓励自己一下。哈,谢谢lz分享。