# 链表
class SignLinklist:
# 节点类
class Node:
def __init__(self, item):
self.item = item
self.next = None
def __str__(self):
return str(self.item)
# 可迭代链表类
class LinklistIterator:
def __init__(self, node):
self.node = node
def __next__(self):
if self.node:
cur_node = self.node
self.node = cur_node.next
return cur_node.item
else:
raise StopIteration
def __iter__(self):
return self
def __init__(self, iterable=None):
self.head = None
self.tail = None
if iterable:
self.extend(iterable)
# 添加节点
def append(self, obj):
node = SignLinklist.Node(obj)
if not self.head:
self.head = node
self.tail = node
else:
self.tail.next = node
self.tail = node
# 批量添加节点
def extend(self, iterable):
for obj in iterable:
self.append(obj)
# 查找节点
def find(self, obj):
for n in self:
if n == obj:
return True
else:
return False
# 遍历链表
def __iter__(self):
return self.LinklistIterator(self.head)
# print 调用打印链表
def __repr__(self):
return '<<' + ','.join(map(str, self)) + '>>'
# 哈希表 类似于集合
class HashTable:
def __init__(self, size=100):
self.size = size
self.T = [SignLinklist() for x in range(self.size)]
def h(self, k):
return k % self.size
def insert(self, k):
i = self.h(k)
if self.find(k):
print('Duplicated Insert')
else:
self.T[i].append(k)
def find(self, k):
i = self.h(k)
return self.T[i].find(k)
if __name__ == '__main__':
ht = HashTable()
ht.insert(10)
ht.insert(110)
ht.insert(210)
ht.insert(310)
print(','.join(map(str, ht.T)))
print(ht.find(210))
python实现哈希表插入 -- 拉链法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...