雜湊表的基本操作 拉鍊法

2021-09-09 07:48:03 字數 2398 閱讀 4399

hashtablebucket.h

#pragma once

#include #include #include #include #include //typedef char* htbkeytype;

//typedef char* htbvaluetype;

//typedef char* htbkeytype;

//typedef int htbvaluetype;

typedef int htbkeytype;

typedef int htbvaluetype;

typedef struct hashnode

hashnode;

typedef struct hashtablebucket

htb;

//初始化

void htbinit(htb* htb, size_t len);

//銷毀

void htbdestory(htb* htb);

//插入

int htbinsert(htb* htb, htbkeytype key, htbvaluetype value);

//刪除

int htbremove(htb* htb, htbkeytype key);

//查詢

hashnode* htbfind(htb* htb, htbkeytype key);

//大小

int htbsize(htb* htb);

//判斷是否為空

int htbempty(htb* htb);

void testhashtablebucket();

hashtablebucket.c

#include "hashtablebucket.h"

static size_t getnextprime(size_t value)//質數表,給增容提供最佳選擇容量大小

; for (; i < 28; ++i) }

return _primelist[27];

}//初始化

void htbinit(htb* htb, size_t len)

//銷毀

void htbdestory(htb* htb)

htb->_tables[i] = null;

} //釋放雜湊表

free(htb->_tables);

htb->_tables = null;

htb->_size = 0;

htb->_len = 0;

}int htbhashfunc(htbkeytype key, int len)

//檢查負載因子是否達到1,如果達到1,則需要擴容

void htbcheckcapacity(htb* htb)

htb->_tables[i] = null;

} //釋放舊的雜湊表

htbdestory(htb);

htb->_tables = newhtb._tables;

htb->_size = newhtb._size;

htb->_len = newhtb._len; }}

//建立節點

hashnode* buyhashnode(htbkeytype key, htbvaluetype value)

//插入乙個元素

int htbinsert(htb* htb, htbkeytype key, htbvaluetype value)

newnode = buyhashnode(key, value);

newnode->_next = htb->_tables[index];

htb->_tables[index] = newnode;

htb->_size++;

return 0;

}//刪除乙個元素

int htbremove(htb* htb, htbkeytype key)

prev = cur;

cur = cur->_next;

} return -1;

}//在雜湊表中查詢乙個元素

hashnode* htbfind(htb* htb, htbkeytype key)

cur = cur->_next;

} return null;

}int htbsize(htb* htb)

int htbempty(htb* htb)

//列印雜湊表

void htbprint(htb* htb)

printf("%d\n", count);

} printf("\n");

}void testhashtablebucket()

int main()

雜湊表(拉鍊法)

開雜湊法又叫鏈位址法 開鏈法 開雜湊法 首先對關鍵碼集合用雜湊函式計算雜湊位址,具有相同位址的關鍵碼歸於同一子集合,每乙個子集合稱為乙個桶,各個 桶中的元素通過乙個單鏈表鏈結起來,各鍊錶的頭結點儲存在雜湊表中。設元素的關鍵碼為37,25,14,36,49,68,57,11,雜湊表為ht 12 表的大...

雜湊表查詢 拉鍊法

雜湊查詢 雜湊查詢 雜湊的第一步是使用雜湊函式將鍵對映成索引 1 除留取餘法 最常用的 特點是容易造成堆積,產生衝突 2 特徵值 3 字元型別的 在查詢中陣列的特點是定址容易,插入和刪除困難,鍊錶則相反 雜湊表將二者的特點綜合。雜湊表建表 通過某種關係轉換,使關鍵字適度的分散到制定大小的順序結構中,...

雜湊錶開雜湊法(拉鍊法)

開雜湊法又叫鏈位址法 開鏈法 設元素的關鍵碼為37,25,14,36,49,68,57,11,雜湊表為ht 12 表的大小為12,雜湊函式為hash x x 11 hash 37 4 hash 25 3 hash 14 3 hash 36 3 hash 49 5 hash 68 2 hash 57 ...