class Node:
def __init__(self, k=None, v=None):
self.k = k
self.v = v
self.n = None
class SymbolTable:
def __init__(self):
self.N = 0
self.head = Node()
self.iter = self.head
super(SymbolTable, 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):
item = self.head
while item is not None:
if item.k == node.k:
item.v = node.v
return node.k, node.v
item = item.n
if self.head.k is None:
self.head = node
else:
node.n = self.head
self.head = node
self.N += 1
return node.k, node.v
def delete(self, key):
item = self.head
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.n is not None:
v = self.iter.v
self.iter = self.iter.n
return v
else:
self.iter = self.head
raise StopIteration
@property
def size(self):
return self.N
if __name__ == '__main__':
sym = SymbolTable()
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("b"))
print(sym.get("a"))
print(sym.delete('a'))
print(sym.get("a"))
print(sym.get("b"))
print(sym.size)
for i in sym:
print(i)
符号表的实现--python
最新推荐文章于 2023-06-05 10:49:26 发布