首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-05-15 
花了一天时间用c写了一个类似java中的HashMapE,E,接受大家的检阅在java中像ArrayList,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_INCLUDEDenum E{E_STRING,E_INT,E_OBJECT}; //枚举类型#endif // E_H_INCLUDEDvoid *hashmap_init(int k,int v); //初始化void *hashmap_put(HashMap this,void *k,void *v); //在此映射中关联指定值与指定键。void *hashmap_get(HashMap this,void *k); //返回指定键在此标识哈希映射中所映射的值,如果对于此键来说,映射不包含任何映射关系,则返回 nullvoid *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分享。

热点排行