哈希表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18 // HashTable

InitializeTable(int TableSize) {

HashTable H;

int i;

// 為散列表分配空間

// 有些编譯器不支持為struct HashTable 分配空間,聲稱這是一個不完全的結構,// 可使用一个指向HashTable的指針為之分配空間。

// 如:sizeof(Probe),Probe作为HashTable在typedef定義的指針。

H = malloc(sizeof(struct HashTable));

// 散列表大小为一个質数

H->TableSize = Prime;

// 分配表所有地址的空間

H->Cells = malloc(sizeof(Cell) * H->TableSize);

// 地址初始為空

for (i =0; i < H->TableSize; i++)

H->Cells[i].info = Empty;

return H;

}

查找空单元并插入:

// Position

Find(ElementType Key, HashTable H) {

Position Current;

int CollisionNum;

// 冲突次数初始为0

// 通過表的大小對關鍵字進行處理

CollisionNum =0;

Current = Hash( Key, H->TableSize );

// 不為空時進行查詢

while (H->Cells[Current].info != Empty &&

H->Cells[Current].Element != Key) {

Current =++CollosionNum *++CollisionNum;

// 向下查找超過表範圍時回到表的開頭

if (Current >= H->TableSize)

Current -= H->TableSize;

}

return Current;

}

分離連接法

散列表的查找过程基本上和造表过程相同。一些关键码可通过散列函数转换的地址直接找到,另一些关键码在散列函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。在介绍的三种处理冲突的方法中,产生冲突后的查找仍然是给定值与关键码进行比较的过程。所以,对散列表查找效率的量度,依然用平均查找长度来衡量。

查找过程中,关键码的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影响产生冲突多少有以下三个因素:

1. 散列函数是否均匀;

2. 处理冲突的方法;

3. 散列表的载荷因子(英語:load factor)。

查找效率

载荷因子

取自“https:///w/index.php?title=哈希表&oldid=58006531”

本页面最后修订于2020年2月5日 (星期三) 16:03。

本站的全部文字在知识共享署名-相同方式共享 3.0协议之条款下提供,附加条款亦可能应用。(请参阅使用条款)Wikipedia®和维基百科标志是维基媒体基金会的注册商标;维基™是维基媒体基金会的商标。

维基媒体基金会是按美国国內稅收法501(c)(3)登记的非营利慈善机构。

相关文档
最新文档