📜  数据结构|杂项|问题1(1)

📅  最后修改于: 2023-12-03 15:40:01.338000             🧑  作者: Mango

问题1:如何在数据结构中实现一个哈希表?

哈希表是一种基于散列函数实现的数据结构,能够快速地查找和插入数据。哈希表底层是由数组和散列函数组成的,散列函数将键映射到数组中的特定位置。

实现步骤:
  1. 定义哈希表的大小和散列函数
  2. 创建一个数据结构来存储键值对。这个数据结构被称为“带链表的数组”,其中每个数组元素包含一个指向链表头部的指针。
  3. 插入数据时,使用散列函数计算键的索引。在数组的相应位置上,如果链表为空,直接插入新节点,否则插入到链表的尾部。
  4. 查找数据时,使用散列函数计算键的索引。在数组的相应位置上,遍历链表查找对应的键。如果找到了,则返回对应的值,否则返回null。
代码实现:
class ListNode:
    def __init__(self, key=None, val=None):
        self.key = key
        self.val = val
        self.next = None

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

    def put(self, key: int, value: int) -> None:
        index = hash(key) % self.size
        if not self.table[index]:
            self.table[index] = ListNode(key, value)
        else:
            curr = self.table[index]
            while curr:
                if curr.key == key:
                    curr.val = value
                    return
                if not curr.next:
                    break
                curr = curr.next
            curr.next = ListNode(key, value)

    def get(self, key: int) -> int:
        index = hash(key) % self.size
        curr = self.table[index]
        while curr:
            if curr.key == key:
                return curr.val
            curr = curr.next
        return -1

    def remove(self, key: int) -> None:
        index = hash(key) % self.size
        curr = prev = self.table[index]
        if not curr:
            return
        if curr.key == key:
            self.table[index] = curr.next
        else:
            curr = curr.next
            while curr:
                if curr.key == key:
                    prev.next = curr.next
                    return
                curr, prev = curr.next, prev.next

以上为Python语言实现哈希表的源代码。