python实现哈希表

# python 实现哈希表

class HashTable:
    """
    哈希函数的构造
    解决冲突
    """

    def __init__(self, source):
        self.source = source
        self._index = []
        self._val = []
        self.table = []
        self._mod = 13

    def Output(self):
        print(self._index)
        print(self._val)
    
    def _create_table(self):
        """
        初始化哈希表
        哈希表长度最短为取余因子_mod,一般为源数据长度
        """
        if len(self.source) < self._mod:
            length = self._mod
        else:
            length = len(self.source)
        
        self._index = [i for i in range(length)]
        self._val = [None for i in range(length)]

    def _func_hash(self):
        """
        构建哈希函数
        """
        for sour in self.source:
            remainder = sour % self._mod
            if self._val[remainder] is None:
                self._val[remainder] = sour
            else:
                # 处理冲突
                rem = remainder
                while self._val[rem] is not None:
                    if(rem + 1 >= len(self._val)):
                        rem = -1
                    rem += 1
                self._val[rem] = sour
        self.table = list(zip(self._index, self._val))


    def get(self, num):
        """
        查找
        """
        rem = num % self._mod
        if self._val[rem] != num:
            while True:
                if(rem + 1 >= len(self._val)):
                    rem = 0
                if self._val[rem] == num:
                    break
                rem += 1
        return rem
    
    def run(self):
        self._create_table()
        self._func_hash()
        self.Output()

if __name__ == '__main__':
    test = [12, 15, 17, 21, 22, 25, 13, 0]
    h = HashTable(test)
    h.run()
    h.get(12)

只是为了巩固哈希表实现的原理,代码本身没什么用

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Junebao

如果你碰巧财力雄厚的话...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值