📜  在Python中使用链式实现散列(1)

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

在Python中使用链式实现散列

散列是一种能够将数据映射到固定范围内的算法。在Python中,我们可以使用散列表(也称为哈希表)来实现散列。散列表允许快速插入、查找和删除数据。

链式哈希表是一种允许多个键映射到同一个散列槽的哈希表。在这个实现中,每个槽都链接到一个链表,每个键值对都插入链表中。

实现

我们可以使用Python中的字典和列表来实现链式哈希表。

class ListNode:
    def __init__(self, key, value):
        self.key = key
        self.value = value
        self.next = None

class HashTable:
    def __init__(self):
        self.size = 1000
        self.table = [None] * self.size

    def hash(self, key):
        hash_value = 0
        for char in key:
            hash_value += ord(char)
        return hash_value % self.size

    def put(self, key, value):
        hash_key = self.hash(key)
        if self.table[hash_key] is None:
            self.table[hash_key] = ListNode(key, value)
        else:
            current_node = self.table[hash_key]
            while current_node:
                if current_node.key == key:
                    current_node.value = value
                    return
                if current_node.next is None:
                    break
                current_node = current_node.next
            current_node.next = ListNode(key, value)

    def get(self, key):
        hash_key = self.hash(key)
        current_node = self.table[hash_key]
        while current_node:
            if current_node.key == key:
                return current_node.value
            current_node = current_node.next
        return None

    def remove(self, key):
        hash_key = self.hash(key)
        current_node = self.table[hash_key]
        previous_node = None
        while current_node:
            if current_node.key == key:
                if previous_node:
                    previous_node.next = current_node.next
                else:
                    self.table[hash_key] = current_node.next
                return
            previous_node = current_node
            current_node = current_node.next
示例
hash_table = HashTable()

hash_table.put('apple', 10)
hash_table.put('banana', 20)
hash_table.put('cherry', 30)

print(hash_table.get('apple'))    # 输出 10
print(hash_table.get('banana'))   # 输出 20
print(hash_table.get('cherry'))   # 输出 30

hash_table.remove('banana')

print(hash_table.get('apple'))    # 输出 10
print(hash_table.get('banana'))   # 输出 None
print(hash_table.get('cherry'))   # 输出 30
总结

链式哈希表是一种常见的散列表实现方式。它可以有效地解决哈希冲突问题,提高插入、查找和删除数据的效率。我们可以使用Python中的字典和列表来实现链式哈希表。