设散列表的地址区间为[0,16],散列函数为h(key)=key%17。采用线性探测法处理冲突,并将关键字序列{ 26,25,72,38,8,18,59 }依次存储到散列表中。元素59存放在散列表中的地址是:
时间: 2023-06-05 11:47:20 浏览: 1687
元素59存放在散列表中的地址是3。
解释:
根据散列函数h(key)=key%17,可以得到每个关键字的散列地址:
26%17=9
25%17=8
72%17=4
38%17=4
8%17=8
18%17=1
59%17=3
由于采用线性探测法处理冲突,当发生冲突时,会依次往后查找空闲的地址,直到找到一个空闲地址为止。
因此,元素59在散列表中的地址为3。
相关问题
设散列表的地址范围为0~17散列函数为H(key)=key%16,用线性探测法处理冲突输入关键字序列(10,24,32,17,31,30,46,47,40,63,49)画出线性探测,链地址法,哈希表三个图
好的,我会根据你的要求进行处理。首先,我们来看一下线性探测法处理冲突的过程。
1. 散列函数 H(key) = key % 16
2. 输入关键字序列(10,24,32,17,31,30,46,47,40,63,49)
3. 用线性探测法进行处理,发生冲突的关键字在散列表中依次向后查找,直到找到一个空的位置为止。
下面是线性探测法处理冲突的图示:
```
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
----------------------------------------------------------------------------
0 |10|24|32| | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
1 |17| | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
2 |31|30| | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
3 |46|47| | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
4 |40| | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
5 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
6 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
7 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
8 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
9 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
10| | | | | | | | | | |49 | | | | | | |63 |
----------------------------------------------------------------------------
```
接下来,我们再来看一下链地址法处理冲突的过程。
1. 散列函数 H(key) = key % 16
2. 输入关键字序列(10,24,32,17,31,30,46,47,40,63,49)
3. 用链地址法进行处理,发生冲突的关键字在散列表中的位置上形成一个链表,每个链表节点存储一个关键字。
下面是链地址法处理冲突的图示:
```
0 -> 10 -> 40
1 -> 17
2 -> 32 -> 47
3 -> 63
4
5 -> 30 -> 46
6
7 -> 31
8
9 -> 24
10
11
12
13
14
15
16
17
```
最后,我们再来看一下哈希表处理冲突的过程。
1. 散列函数 H(key) = key % 16
2. 输入关键字序列(10,24,32,17,31,30,46,47,40,63,49)
3. 用哈希表进行处理,发生冲突的关键字在散列表中的位置上形成一个链表,每个链表节点存储一个关键字。
下面是哈希表处理冲突的图示:
```
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
----------------------------------------------------------------------------
0 |10| | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
1 | | |32| | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
2 | | | | | |30 | | | | | | | | | | | | |
----------------------------------------------------------------------------
3 | | | |17 | | |46 |47 | | | | | | | | | | |
----------------------------------------------------------------------------
4 | | | | |31 | | | | | | | | | | | | | |
----------------------------------------------------------------------------
5 | |24 | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
6 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
7 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
8 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
9 | | | | | | | | | | | | | | | | | | |
----------------------------------------------------------------------------
10| | | | | | | | | |49 | | | | | |40 | |63 |
----------------------------------------------------------------------------
```
对于查找集合{16,24,7,9,13,20},设散列表长为8,散列函数为H(key) = key mod 7,请分别画出线性探测法处理冲突构造的散列表。
对于给定的集合{16,24,7,9,13,20},我们使用散列函数H(key) = key mod 7来将元素映射到散列表中,长度为8。因为模运算可能导致溢出,我们需要考虑线性探测法解决冲突。
初始时,我们的散列表会是空的,每个槽位编号从0到7:
```
[ ] [ ] [ ] [ ] [ ] [ ] [ ]
```
首先插入16,H(16) = 16 % 7 = 2,所以它会被放置在第二个槽位,如果2已经被占用,线性探测开始:
```
[ ] [16] [ ] [ ] [ ] [ ] [ ]
```
接下来是24,H(24) = 24 % 7 = 3,同样如果3已经有元素,依次向右移动直到找到空槽:
```
[ ] [16] [ ] [24] [ ] [ ] [ ]
```
接着是7,H(7) = 7 % 7 = 0,填充第一个槽位:
```
[7] [16] [24] [ ] [ ] [ ] [ ]
```
然后是9,H(9) = 9 % 7 = 2,再次与第一个冲突,移动到第二个位置:
```
[7] [9] [24] [ ] [ ] [ ] [16]
```
13的散列值H(13) = 13 % 7 = 6,填充第六个槽位:
```
[7] [9] [24] [ ] [13] [16] [ ]
```
最后是20,H(20) = 20 % 7 = 6,这与13冲突,线性探测,但散列表已满,所以需要在最后一个槽位之后开始搜索:
```
[7] [9] [24] [ ] [13] [20] [16]
```
由于散列表满了,我们将20放在了最右侧,形成了线性探测的结果。
阅读全文