鏈式雜湊表

2021-07-22 23:56:15 字數 3701 閱讀 9125

將資料儲存在桶中-桶是鍊錶。如果衝突,增大鍊錶長度

需要用到我的鍊錶

標頭檔案

//

// cntbl.h

// hash

//// created by bikang on 16/9/22.

//#ifndef __hash__cntbl__

#define __hash__cntbl__

#include "list.h"

#include

typedef struct chtbl_chtbl;

//初始化

int chtbl_init(chtbl *htbl,int buckets,int (*h)(const

void *key),

int(*match)(const

void *k1,const

void *k2),

void(*destroy)(void*data));

//銷毀

void chtbl_destroy(chtbl *htbl);

//插入

int chtbl_insert(chtbl *htbl,void *data);

//刪除

int chtbl_remove(chtbl *htbl,void **data);

//查詢

int chtbl_lookup(chtbl *htbl,void **data);

//資料的多少

#define chtbl_size(htbl) ((htbl)->size)

#endif /* defined(__hash__cntbl__) */

實現

//

// cntbl.c

// hash

//// created by bikang on 16/9/22.

//#include

#include

#include

#include "cntbl.h"

#include "list.h"

//初始化

int chtbl_init(chtbl *htbl,int buckets,int (*h)(const

void *key),

int(*match)(const

void *k1,const

void *k2),

void(*destroy)(void*data))

htbl->h = h;

htbl->match = match;

htbl->destroy = destroy;

htbl->size = 0;

return0;}

//釋放資料

void chtbl_destroy(chtbl *htbl)

free(htbl->table);

memset(htbl, 0, sizeof(chtbl));

return;

}//插入

int chtbl_insert(chtbl *htbl,void *data)

//刪除

int chtbl_remove(chtbl *htbl,void **data)else

}prev = element;

}return -1;

}//查詢是否存在元素

int chtbl_lookup(chtbl *htbl,void **data)

}return -1;

}

hash函式標頭檔案及其實現

//

// hashpjw.h

// hash

//// created by bikang on 16/9/22.

//#ifndef __hash__hashpjw__

#define __hash__hashpjw__

#define prime_tblsiz 4096

unsigned int hashpjw(const

void *key);

#endif /* defined(__hash__hashpjw__) */

//// hashpjw.c

// hash

//// created by bikang on 16/9/22.

//#include "hashpjw.h"

unsigned int hashpjw(const

void *key)

//printf("new_val=%d,",val);printf("\n");

ptr++;

}return val%prime_tblsiz;

}

匹配函式及其標頭檔案

//

// match.h

// hash

//// created by bikang on 16/9/22.

//#ifndef __hash__match__

#define __hash__match__

#include

int match_int(const

void *k1,const

void *k2);

int match_chars(const

void *k1,const

void *k2);

#endif /* defined(__hash__match__) */

//// match.c

// hash

//// created by bikang on 16/9/22.

//#include "match.h"

#include

int match_int(const

void *k1,const

void *k2)else

}int match_chars(const

void *k1,const

void *k2)else

}

測試**

//

// main.c

// hash

//// created by bikang on 16/9/22.

//#include

#include "hashpjw.h"

#include "match.h"

#include "cntbl.h"

void thashpjw();

void tres();

void tcntble();

int main(int argc, const

char * argv)

void tcntble()else

findret = chtbl_remove(t1, (void**)pptr);

if(findret==0)else

//查詢資料

pptr = &ptr;

findret = chtbl_lookup(t1,(void**)pptr);

if(findret == 0)else

printf("chtbl_size=%d",chtbl_size(t1));

//銷毀資料

chtbl_destroy(t1);

}void tres()

void thashpjw()

開鏈式雜湊表

hashtable適用於需要頻繁插入 刪除 查詢的場合 在這些場合中hashtable都可以常數平均時間完成 然而之所以hashtable的效率這麼高 是因為在以上這些操作時都是通過hash function直接定位元素在表中的位置然後直接操作。不可避免的有一些部分性質或全部性質相同的元素被定位到同...

PHP實現 拉鍊式雜湊表

使用php語言實現資料的 拉鍊式雜湊 儲存 author beggar 770793038 qq.com date 2015 05 08 class hashtable 取每個字元的asc碼之和並對其取餘,實現簡單的雜湊函式 param type key return boolean private...

雜湊表 雜湊表

一 定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式...