線性探測可再雜湊的雜湊

2021-07-11 18:44:43 字數 1965 閱讀 6949

資料結構與演算法分析——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的 所以 ...