You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:12:02