動態雜湊表的基本操作
函式實現部分
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通過乙個固定的演算法函式...
雜湊表(雜湊表)
雜湊表是最基礎的資料結構之一,利用鍵值對儲存並檢索資料的一種非線性結構。在其它各種結構線性表 樹等資料結構中,記錄在結構中的位置是隨機的,和記錄關鍵字之間不存在確定的關係,因此,在結構中查詢記錄時需進行一系列和關鍵字的 比較 的基礎上。在順序查詢時,比較的結果為 與 兩種可能 在折半查詢 二叉排序樹...