動態雜湊表

2021-08-17 03:00:03 字數 4408 閱讀 2121

動態雜湊表的基本操作

函式實現部分

void

inithashbucket(

ht*

ht,

intcapacity

)//初始化雜湊表

// 獲取容量

capacity

= getprime(

capacity

);ht

->table = (

pnode

*)malloc(

sizeof

(node

)*capacity

);//雜湊表的初始化

for(

inti = 0; i <

ht->capacity; i++)

//容量和元素個數

ht->size = 0;

ht->capacity =

capacity;}

intinserthashbucketunique(

ht*

ht,

kkey, v

v)//插入不同的資料

chechcapacity(

ht);

//資料是否在表中

intnum = hashfunc(

ht,

key);

pnode

pcur =

ht->table[num];

while

(pcur)

//不為空

pcur = pcur->_pnext;

}//如果為空,則建立新節點

pnode

pnewnode = buynode(

key, v);

//建立新節點

pnewnode->_pnext =

ht->table[num];

//將其插入

ht->size++;

}int

deletehashbucketunique(

ht*

ht,

kkey

)//刪除不同的數

intnum = hashfunc(

ht,

key);

pnode

pcur =

ht->table[num];

pnode

prev =

null

;while

(pcur)

prev = pcur;

//記錄prev

pcur = pcur->_pnext;

ht->size--;

}return0;}

intdeletehashbucketequal(

ht*

ht,

kkey

)//刪除相同的數,2,22,2,2,32,4

intnum = hashfunc(

ht,

key);

pnode

pcur =

ht->table[num];

pnode

prev =

null

;while

(pcur)

prev = pcur;

prev->_pnext = pcur->_pnext;

}prev = pcur;

//記錄prev

pcur = pcur->_pnext;

prev->_pnext = pcur->_pnext;

ht->size--;

}return0;}

pnode

findhashbucket(

ht*

ht,

kkey

)//查詢

intnum = hashfunc(

ht,

key);

pnode

pcur =

ht->table[num];

while

(pcur)

pcur = pcur->_pnext;

//後移

return0;}

}int

chechcapacity(

ht* ht)

//擴容

//開闢新空間if(

ht->size ==

ht->capacity)

//拷貝元素

for(i = 0; i <

ht->capacity; i++)}}

//釋放舊空間

ht->table = newtable;

ht->capacity = newcapacity;

//更新容量

free(

ht->table);

return1;}

}void

destroyhashbucket(

ht* ht)

//銷毀雜湊表

for(

intnum = 0; num <

ht->capacity; num++)}}

inthashfunc(

ht*

ht,

kkey

)//雜湊函式

pnode

buynode(

kkey, v

value

)//建立新節點

void

printhashbucket(

ht* ht)

//列印雜湊表

for(

inti = 0; i <

ht->capacity; i++)

printf(

"null\n");}

}unsigned

long

getprime(

intdata

)//獲取容量

}return

data;}

標頭檔案

#include

"stdio.h"

#include

"assert.h"

#include

"malloc.h"

typedef

char* k

;typedef

char* v

;typedef

struct

pair

pair

;typedef

(*phf

)(int

);typedef

struct

node

node

, *pnode

;typedef

struct

hashtableht;

#define

_primesize

28      

static

const

unsigned

long

_primelist[

_primesize

] =;

// // .h

void

inithashbucket(

ht* ht,

intcapacity);

intinserthashbucketunique(

ht* ht,

kkey,

vv);

intdeletehashbucketunique(

ht* ht,

kkey);

void

inserthashbucketequal(

ht* ht,

kkey,

vv);

intdeletehashbucketequal(

ht* ht,

kkey);

pnode

findhashbucket(

ht* ht,

kkey);

intchechcapacity(

ht* ht);

void

destroyhashbucket(

ht* ht);

inthashfunc(

ht* ht,

kkey);

pnode

buynode(

kkey,

vvalue);

void

printhashbucket(

ht* ht);

unsigned

long

getprime(

intdata);

測試函式

#include

"ht.h"

intmain()

動態查詢 雜湊表

折半查詢 二叉排序樹等查詢時的查詢效率依賴於查詢過程中所進行的比較次數。而理性情況下是希望不經過比較的,一次訪問便能得到,那就必須在記錄的儲存位置和他的關鍵字之間建立一種確定的對應關係f,是每個關鍵字和結構中的乙個唯一的儲存位置相對應。根據對應關係f找到給定值k的像分f k 若結構中存在和k值相等的...

雜湊表 雜湊表

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

雜湊表(雜湊表)

雜湊表是最基礎的資料結構之一,利用鍵值對儲存並檢索資料的一種非線性結構。在其它各種結構線性表 樹等資料結構中,記錄在結構中的位置是隨機的,和記錄關鍵字之間不存在確定的關係,因此,在結構中查詢記錄時需進行一系列和關鍵字的 比較 的基礎上。在順序查詢時,比較的結果為 與 兩種可能 在折半查詢 二叉排序樹...