DS哈希查找--链地址法(表头插入) 时间限制 1s 内存限制 128MB 题目描述 给出一个数据序列,建立哈希表,采用求余法作为哈希函数,模数为11,哈希冲突用链地址法和表头插入 如果首次查找失败,就把数据插入到相应的位置中 实现哈希查找功能 输入 第一行输入n,表示有n个数据 第二行输入n个数据,都是自然数且互不相同,数据之间用空格隔开 第三行输入t,表示要查找t个数据 从第四行起,每行输入一个要查找的数据,都是正整数 输出 每行输出对应数据的查找结果 用c++实现 并且每一行输出查找的次数 失败则输出error
时间: 2023-06-27 12:02:31 浏览: 20
这道题目需要我们实现哈希表的基本操作:插入和查找。我们可以使用链地址法(也叫拉链法)来解决哈希冲突。
具体步骤如下:
1. 定义一个结构体 `Node`,表示哈希表中的节点。每个节点包含两个成员变量:`data` 存储数据,`next` 指向下一个节点。这里我们使用单链表来实现链地址法。
2. 定义一个数组 `hashTable`,长度为 11。我们将每个数据通过哈希函数映射到数组中的某个位置,如果该位置已经有节点,则将新节点插入到链表的头部。
3. 实现插入操作。对于一个要插入的数据,先计算其哈希值,然后将其插入到对应位置的链表头部。
4. 实现查找操作。对于一个要查找的数据,先计算其哈希值,然后遍历对应位置的链表,查找是否存在该数据。
下面是代码实现:
相关问题
DS哈希查找--链地址法(表头插入)
链地址法是哈希表解决冲突的一种方法,它的基本思想是将哈希表中的每个槽作为一个链表的头结点,将哈希值相同的元素插入到相应的链表中。
在链地址法中,每个槽都是一个链表的头结点,每个元素都被插入到相应槽对应的链表中。当发生哈希冲突时,只需要在相应槽对应的链表中插入新元素即可。
具体实现时,可以使用一个数组来存储链表的头结点。插入元素时,先计算出它在哈希表中的位置,然后将它插入到相应槽对应的链表的头部即可。
下面是一个使用链地址法解决哈希冲突的示例代码:
```python
class Node:
def __init__(self, val):
self.val = val
self.next = None
class HashTable:
def __init__(self, size):
self.size = size
self.table = [None] * size
def hash(self, val):
return val % self.size
def insert(self, val):
index = self.hash(val)
node = Node(val)
node.next = self.table[index]
self.table[index] = node
def search(self, val):
index = self.hash(val)
node = self.table[index]
while node:
if node.val == val:
return True
node = node.next
return False
def delete(self, val):
index = self.hash(val)
node = self.table[index]
if not node:
return False
if node.val == val:
self.table[index] = node.next
return True
while node.next:
if node.next.val == val:
node.next = node.next.next
return True
node = node.next
return False
```
在这个实现中,我们使用了一个 `Node` 类来表示链表中的节点。在 `HashTable` 类中,我们使用一个数组 `table` 来存储链表的头结点。`hash` 方法用来计算元素的哈希值。`insert` 方法用来插入元素,将它插入到相应槽对应的链表的头部。`search` 方法用来查找元素,遍历相应槽对应的链表,直到找到元素或遍历完链表。`delete` 方法用来删除元素,首先需要遍历相应槽对应的链表,找到要删除的元素,然后将它从链表中删除即可。
C. DS哈希查找--链地址法(表头插入) 时间限制 1s 内存限制 128MB 题目描述 给出一个数据序列,建立哈希表,采用求余法作为哈希函数,模数为11,哈希冲突用链地址法和表头插入 如果首次查找失败,就把数据插入到相应的位置中 实现哈希查找功能 输入 第一行输入n,表示有n个数据 第二行输入n个数据,都是自然数且互不相同,数据之间用空格隔开 第三行输入t,表示要查找t个数据 从第四行起,每行输入一个要查找的数据,都是正整数 输出 每行输出对应数据的查找结果
```python
n = int(input())
data = list(map(int, input().split()))
hash_table = [[] for _ in range(11)] # 初始化哈希表
for num in data:
index = num % 11 # 求余得到哈希表下标
hash_table[index].insert(0, num) # 表头插入
t = int(input())
for i in range(t):
target = int(input())
index = target % 11
if target in hash_table[index]: # 直接查找成功
print('yes')
else:
hash_table[index].insert(0, target) # 插入到相应位置
print('no')
```
相关推荐













