2015-02-10 67 views
0

我一直在为我的MyChainHashTable类尝试编写insert(self, key)方法。链式哈希表:插入功能

它应该使用单独的链接来处理冲突解决。如果密钥不在散列表中,那么它应该在密钥链接列表的末尾插入密钥并返回hashkey。如果密钥已经在哈希表中,那么它应该返回-1

这里是我的类:

class MyChainHashTable: 

    def __init__(self, capacity): 
     self.capacity = capacity 
     self.slots = [ ] 
     for i in range(self.capacity): 
      self.slots.append([]) 

    def __str__(self): 
     info = "" 
     for items in self.slots: 
      info += str(items) 
     return info 

    def __len__(self): 
     count = 0 
     for i in self.slots: 
      count += len(i) 
     return count 

    def hash_function(self, key): 
     i = key % self.capacity 
     return i 

我尝试这样做:

def insert(self, key): 
     self.slots[self.hash_function(key)].append(key) 

但我不知道如何解决冲突或如何返回-1

测试是:

x = MyChainHashTable(2) 
print("Add 3, return:", x.insert(3)) 
print("Add 3, return:", x.insert(3)) 
print("Hashtable:", x) 

的结果应该是:

Add 3, return: 1 
Add 3, return: -1 
Hashtable: [][3] 

回答

1

这确实你说你想要的:

def insert(self, key): 
     slot = self.hash_function(key) 
     if key in self.slots[slot]: 
      return -1 
     else: 
      self.slots[slot].append(key) 
      return slot