如何用Python实现线性探测哈希表?现有代码需完善
实现基于线性探测的哈希表
先修正现有代码的错误,再补充核心逻辑完成需求,以下是完整实现方案:
1. 修正初始化方法的拼写错误
原代码中def_init_是拼写失误,正确的类构造函数应该是__init__(前后各两个下划线)。
2. 补充核心方法
需要实现哈希函数、线性探测的插入逻辑,以及哈希表的打印逻辑:
完整代码
employeeID = [107,35,25,13,101,43,98,57,1,2,3,4] employeeName = ["a","b","c","d","e","f","g","h","i","j","k","Err"] class HashTable: hashSize = 11 totalMember = 0 def __init__(self): self.hashTable = [[None] * 2 for _ in range(self.hashSize)] # 哈希函数:取余法计算初始位置 def hash_func(self, emp_id): return emp_id % self.hashSize # 线性探测插入数据 def insert(self, emp_id, emp_name): # 表满直接提示溢出 if self.totalMember >= self.hashSize: print(f"Adding {emp_id} : Hash is Overflow") return hash_val = self.hash_func(emp_id) # 线性探测寻找空位置 while self.hashTable[hash_val][0] is not None: hash_val = (hash_val + 1) % self.hashSize # 存入员工数据 self.hashTable[hash_val][0] = emp_id self.hashTable[hash_val][1] = emp_name self.totalMember += 1 # 按索引顺序打印哈希表 def print_table(self): for idx in range(self.hashSize): emp_id, emp_name = self.hashTable[idx] print(f"{idx} {emp_id} {emp_name}") # 实例化哈希表并批量插入数据 ht = HashTable() for emp_id, emp_name in zip(employeeID, employeeName): ht.insert(emp_id, emp_name) # 输出最终哈希表 ht.print_table()
代码说明
hash_func:用取余法计算员工ID对应的初始哈希位置。insert:先判断表是否已满,满则直接输出溢出提示;否则通过线性探测找到第一个空位置存入数据,同时维护已存入数据的计数。print_table:遍历哈希表的每个索引,按要求格式输出内容。
运行代码后会得到期望输出:
Adding 4 : Hash is Overflow 0 98 g 1 1 i 2 35 b 3 25 c 4 13 d 5 101 e 6 57 h 7 2 j 8 107 a 9 3 k 10 43 f
内容的提问来源于stack exchange,提问作者Winit Auppakarasakun
相关产品推荐
相关产品推荐

