要解决这个问题,我们需要使用线性探测法处理冲突,并找到关键字为 49 的结点地址。以下是详细步骤:
1. 已知条件
- 散列表长度 ( m = 14 )。
- 散列函数 ( H(key) = key % 11 )。
- 表中已有 4 个结点:
- ( H(15) = 15 % 11 = 4 )。
- ( H(38) = 38 % 11 = 5 )。
- ( H(61) = 61 % 11 = 6 )。
- ( H(84) = 84 % 11 = 7 )。
- 采用线性探测法处理冲突。
2. 计算关键字 49 的初始散列地址
使用散列函数计算:
[
H(49) = 49 % 11 = 5
]
初始地址为 5。
3. 处理冲突
检查地址 5 是否已被占用:
- 地址 5 已被关键字 38 占用,发生冲突。
- 使用线性探测法,依次检查下一个地址,直到找到空闲位置。
线性探测法的公式为:
[
H_i = (H(key) + i) % m \quad (i = 0, 1, 2, \dots)
]
其中 ( m = 14 )。
具体步骤如下:
- ( i = 0 ):( H_0 = (5 + 0) % 14 = 5 )(被占用)。
- ( i = 1 ):( H_1 = (5 + 1) % 14 = 6 )(被占用)。
- ( i = 2 ):( H_2 = (5 + 2) % 14 = 7 )(被占用)。
- ( i = 3 ):( H_3 = (5 + 3) % 14 = 8 )(空闲)。
4. 插入关键字 49
将关键字 49 插入地址 8。
5. 最终散列表状态
插入关键字 49 后,散列表的状态如下:
地址:0 1 2 3 4 5 6 7 8 9 10 11 12 13
值: - - - - 15 38 61 84 49 - - - - -
答案
关键字为 49 的结点地址是 8。