class Node:
def __init__(self, k=None, v=None):
self.k = k
self.v = v
self.n = None
class OrderSymbolTable:
def __init__(self):
self.N = 0
self.head = Node()
self.iter = self.head
super(OrderSymbolTable, self).__init__()
def get(self, key):
item = self.head
while item is not None:
if item.k == key:
return item.v
item = item.n
return None
def put(self, node):
temp = self.head
if temp.k is None:
self.head = node
self.iter = self.head
return self.head.k, self.head.v
while temp.n is not None:
if temp.k == node.k:
temp.v = node.v
self.N += 1
return temp.k, temp.v
if temp.k < node.k < temp.n.k:
node.n = temp.n
temp.n = node
self.N += 1
return temp.n.k, temp.n.v
temp.n = node
self.N += 1
return temp.n.k, temp.n.v
def delete(self, key):
item = self.head
if item.k == key:
self.head = self.head.n
self.N -= 1
return item.v
while item.n is not None:
if item.n.k == key:
item.n = item.n.n
self.N -= 1
return item.v
else:
item = item.n
return None
def __iter__(self):
return self
def __next__(self):
if self.iter is not None:
k = self.iter.k
self.iter = self.iter.n
return k
else:
self.iter = self.head
raise StopIteration
@property
def size(self):
return self.N
if __name__ == '__main__':
sym = OrderSymbolTable()
node = Node('a', 1)
node2 = Node('b', 2)
node3 = Node('a', 3)
print(sym.put(node))
print(sym.put(node2))
print(sym.put(node3))
# print(sym.get("a"))
# print(sym.get("b"))
# print(sym.delete('a'))
# print(sym.get("a"))
# print(sym.get("b"))
print(sym.size)
for i in sym:
print(i)
python实现有序符号表
最新推荐文章于 2021-12-06 15:45:52 发布