class Linklist:
class Node:
def __init__(self,item):
self.item = item
self.next = None
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):
s = Linklist.Node(obj)
if not self.head:
self.head = s
self.tail = s
else:
self.tail.next =s
self.tail = s
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)
def __repr__(self):#转换字符串
"""
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数
返回包含每次 function 函数返回值的新列表。
"""
return '<<'+','.join(map(str,self))+'>>'
#类似于集合的结构
class HashTable:
def __init__(self,size = 101):
self.size = size
self.T = [Linklist() for i 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)
ht = HashTable()
ht.insert(0)
ht.insert(1)
ht.insert(3)
ht.insert(102)
ht.insert(508)
#print(','.join(map(str,ht.T)))
print(ht.find(3))