資料結構與演算法分析——c語言描述 第五章 分離鏈結雜湊表
從書上的**小改一下。插入的時候自動選擇是否再雜湊,所以insert要返回乙個hashtable。
還有增加是否查抄成功。(雖然可以通過返回-1來返回查詢失敗)
hashquad.h
typedef char* elementtype;
#ifndef _hashquad_h
#define _hashquad_h
typedef unsigned int index;
typedef index position;
struct hashtbl;
typedef struct hashtbl* hashtable;
hashtable initializetable(int tablesize);
void destroytable(hashtable h);
position find(elementtype key, hashtable h);
hashtable insert(elementtype key, hashtable h);
hashtable rehash(hashtable h);
elementtype retrive(position p,hashtable h);
int islegitimate(position pos, hashtable h);
#endif
hashquad.c
#include"hashquad.h"
#include"fatal.h"
#include#include#define mintablesize 10
enum kindofentry ;
struct hashentry ;
typedef struct hashentry cell;
struct hashtbl ;
static int hash(elementtype key, int tablesize)
static int isprime(int num)
static int nextprime(int num)
int islegitimate(position pos,hashtable h)
hashtable initializetable(int tablesize)
h = malloc(sizeof(struct hashtbl));
if (h == null)
fatalerror("out of space!!!");
h->tablesize = nextprime(tablesize);
h->thecells = malloc(sizeof(cell)*h->tablesize);
h->hasinsertednum = 0;
if (h->thecells == null)
fatalerror("out of space!!!");
for (i = 0; i < h->tablesize; i++)
return h;
}void destroytable(hashtable h)
position find(elementtype key, hashtable h)
return currentpos;
}hashtable insert(elementtype key, hashtable h)
return h;
}hashtable rehash(hashtable h)
elementtype retrive(position p, hashtable h)
main.c
#include"hashquad.h"
#includeint main()
DS雜湊查詢 線性探測再雜湊
題目問題 a ds雜湊查詢 線性探測再雜湊 時間限制 1 sec 記憶體限制 128 mb 提交 454 解決 303 提交 狀態 討論版 題目描述 定義雜湊函式為h key key 11,輸入表長 大於 等於11 輸入關鍵字集合,用線性探測再雜湊構建雜湊表,並查詢給定關鍵字。程式要求 若使用c 只...
雜湊 線性探測法
time limit 1 secs,memory limit 256 mb 使用線性探測 法 linear probin g 可以解決雜湊中的衝突問題,其基本思想是 設雜湊函式為 h key d,並且假定雜湊的儲存結構是迴圈陣列 則當衝突發生時 繼續探測 d 1,d 2 直到衝突得到解決 例如,現有...
POJ 1186 hash 線性探測再雜湊
一直以來我都覺得線性探測再雜湊這個方法一定很低效 結果碰到今天這題之後我驚奇的發現 鍊錶居然被線性探測再雜湊秒殺了 這個hash方法是將大數取模,放到乙個位置上,如果這個位置被占用了,就往後移1格,再被佔再移動知道能 放到某個位置上。詳細見資料結構書 真是太神奇了 懶得寫dfs 直接for的 所以 ...