python中双列表实现哈希表(下)

#课后作业#

对于上次所提到的hash表的实现,还有一部分还没有进行实现

今天,我们的任务是:1.len()方法--返回键值对数目。

2.del()方法---删除键值对

那么,我们开始吧

一.len()求键值的个数

我的思路是:逆向法来表示,既然key这个很难表示,那我们就统计None的数,再用总数减去None的数,就可以得到end(最终的键值对数目)

def len(self):
    count = 0
    position = 0
#count用来计数 position代表从第一个槽开始
    for position in range(self.size):
        if self.slots[position] == None:
            count = count + 1
#每当我们遇到一个None时,便加一个数        
    end = self.size - count
    return end
#用总槽数减去null槽数,就是键值对数目

因为在我们这里的设置是:插入键(key)的同时也插入值(value),所以,我们只要先计算出空槽的个数,逆向地求出键值对的个数即可。

二.del()方法删除键值对

对于del()方法这一点来说,我们先得确保该键值对必须存在在这个hashTable之中,随后才可以进行接下来的删除操作。

那么我们该怎么去找到该值呢?

我们需要一个变量即可----key(键),找到键的话,就可以通过get()方法来找到该值(value)

那么接下来就只用来一步步的实现了,我的想法是:将键值对都修改为None,因为删除该键值对,不是直接把那个槽给直接删掉了。

同get函数里面的操作大部分相同,同过再散列来找到该键

def del(self,key):
    hashvalue = self.hashfunction(key)
#先求出该键的初始值
    
    found = False
#寻找出该键在该哈希表中的正确位置
    while not found:
        if self.slots[hashvalue] == None:
            return found
        elif self.slots[hashvalue] == key:
              if self.data[hashvalue] == self.get(key):
                    found = True
              else:
                    hashvalue = self.rehash(hashvalue)
     return hashvalue
#最后返回出正确的位置的值
      self.slots[hashvalue] = None
      self.data[hashvalue] = None
#根据正确的位置,完成删除

我的想法是:只有找到正确位置,才能够确定正确值和正确的键,从而实现删除的操作

最后,这些方法是我在学习过程中所遇到的课后训练,若有任何错误欢迎指出,如果您有更好的方法,欢迎您来到评论区留下您的思考。谢谢

你可能感兴趣的:(散列表,数据结构,python)