老师,我是照着你的代码的逻辑写的,为什么你的运行没出问题,我的运行出问题了,麻烦帮忙看下,谢谢!
class Array():
def __init__(self,size=4):
self.__size = size # 记录容器大小
self.__item = [None]*size #分配空间
self.__length = 0
def __setitem__(self,key,value):
self.__item[key] = value
self.__length += 1
def __getitem__(self,key):
return self.__item[key]
def __len__(self):
return self.__length
def __iter__(self):
for value in self.__item:
yield value
class Slot():
def __init__(self,key=None,value=None,next=None):
self.key = key
self.value = value
self.next = next
def __str__(self):
return 'key:{},value:{}'.format(self.key,self.value)
class HashTable():
def __init__(self,size=4):
self.size = size
self.item = Array(self.size)
def get_index(self,key):
return hash(key) % self.size
def push(self,key,value): # 存放数据
s = Slot(key,value)
index = self.get_index(key) # # 获取默认的索引位置
if self.item[index] == None: # 索引位置是空的
self.item[index] = s
else: # 索引位置是非空的
if self.item[index].key == key: # 所占空间的数据的key 与 传入数据 key 相同
self.item[index].value = value
else: # 所占空间的数据的key 与 传入数据 key 不相同
temp_next = self.item[index].next # 记录下一个节点
while temp_next is not None:
if temp_next.key == key:
temp_next.value = value # 更新原来节点的数据
return
temp_next = temp_next.next # 继续往下移动一个节点
temp_next = s
def get(self,key): # 获取数据
index = self.get_index(key) # 获取key对应的索引
if self.item[index]: # 索引位置不为空
if self.item[index].key == key: # 索引位置的key 与 传入数据 key 相同
return self.item[index].value # 获取索引位置的key对应的value
else:
temp_next = self.item[index].next # 记录下一个节点
while temp_next is not None: # 下一个节点不为空
if temp_next.key == key:
return temp_next.value # 找到则获取
temp_next = temp_next.next # 未找到则继续往下移动一个节点
return None
return None
if __name__ == "__main__":
h = HashTable()
h.push('name','吕布')
h.push('sex1','男')
h.push('sex2','女')
h.push('sex3','保密')
print(h.get('name'))
print(h.get('sex3'))
print(h.get('sex2'))
print(h.get('sex1'))
# print(h.get('age'))
运行截图:
