📜  使用开放寻址实现哈希表的程序(1)

📅  最后修改于: 2023-12-03 14:49:54.739000             🧑  作者: Mango

使用开放寻址实现哈希表的程序

介绍

本文将介绍如何使用开放寻址法实现哈希表,通过哈希算法将键映射到数组中的索引位置,并使用开放寻址法处理哈希冲突。哈希表是一种高效的数据结构,可用于快速查找、插入和删除操作。

开放寻址法

开放寻址法是一种解决哈希冲突的方法,当发生冲突时,它会寻找下一个可用的槽位,直到找到一个空闲的位置来存储数据。开放寻址法通过使用线性探测、二次探测、双重哈希等方式来寻找下一个空闲槽位。

实现哈希表

下面是使用开放寻址法实现哈希表的示例代码:

class HashTable:
    def __init__(self, capacity):
        self.capacity = capacity
        self.table = [None] * self.capacity
    
    def hash(self, key):
        return key % self.capacity
    
    def insert(self, key, value):
        index = self.hash(key)
        
        while self.table[index] is not None:
            if self.table[index][0] == key:
                self.table[index] = (key, value)  # 更新值
                return
            index = (index + 1) % self.capacity
        
        self.table[index] = (key, value)
    
    def get(self, key):
        index = self.hash(key)
        
        while self.table[index] is not None:
            if self.table[index][0] == key:
                return self.table[index][1]
            index = (index + 1) % self.capacity
        
        return None
    
    def remove(self, key):
        index = self.hash(key)
        
        while self.table[index] is not None:
            if self.table[index][0] == key:
                self.table[index] = None
                return
            index = (index + 1) % self.capacity
    
    def display(self):
        for i in range(self.capacity):
            if self.table[i] is not None:
                print(f"Key: {self.table[i][0]}, Value: {self.table[i][1]}")
使用示例
hash_table = HashTable(10)

# 插入数据
hash_table.insert(5, "Apple")
hash_table.insert(2, "Orange")
hash_table.insert(3, "Banana")

# 获取数据
print(hash_table.get(2))  # Output: Orange

# 更新数据
hash_table.insert(3, "Peach")

# 删除数据
hash_table.remove(5)

# 显示哈希表内容
hash_table.display()

输出:

Key: 2, Value: Orange
Key: 3, Value: Peach

以上示例演示了如何创建一个哈希表实例,插入、获取、更新和删除数据,并显示哈希表中的内容。

希望这个示例程序对你理解和实现使用开放寻址法的哈希表有所帮助!