import random import time import sys def mr(name, phone): return {"name": name, "phone": phone} #llист def ll_create_node(record): return [record, None] def ll_insert(ll_head, record): new_node = ll_create_node(record) new_node[1] = ll_head[0] ll_head[0] = new_node def ll_find(ll_head, name): cur = ll_head[0] while cur: if cur[0]["name"] == name: return cur[0] cur = cur[1] return None def ll_delete(ll_head, name): cur = ll_head[0] prev = None while cur: if cur[0]["name"] == name: if prev: prev[1] = cur[1] else: ll_head[0] = cur[1] return True prev = cur cur = cur[1] return False def ll_list_all(ll_head): res = [] cur = ll_head[0] while cur: res.append(cur[0]) cur = cur[1] return res #ht def ht_hash(name, size): return hash(name) % size def ht_insert(table, record): idx = ht_hash(record["name"], len(table)) new_node = ll_create_node(record) new_node[1] = table[idx] table[idx] = new_node def ht_find(table, name): idx = ht_hash(name, len(table)) cur = table[idx] while cur: if cur[0]["name"] == name: return cur[0] cur = cur[1] return None def ht_delete(table, name): idx = ht_hash(name, len(table)) cur = table[idx] prev = None while cur: if cur[0]["name"] == name: if prev: prev[1] = cur[1] else: table[idx] = cur[1] return True prev = cur cur = cur[1] return False def ht_list_all(table): res = [] for head in table: cur = head while cur: res.append(cur[0]) cur = cur[1] return res # bst def bst_create_node(record): return [record, None, None] def bst_insert(root, record): if root is None: return bst_create_node(record) if record["name"] < root[0]["name"]: root[1] = bst_insert(root[1], record) elif record["name"] > root[0]["name"]: root[2] = bst_insert(root[2], record) else: #мб root[0] = record return root def bst_find(root, name): if root is None: return None if name == root[0]["name"]: return root[0] elif name < root[0]["name"]: return bst_find(root[1], name) else: return bst_find(root[2], name) def bst_find_min(node): while node[1] is not None: node = node[1] return node def bst_delete(root, name): if root is None: return None if name < root[0]["name"]: root[1] = bst_delete(root[1], name) elif name > root[0]["name"]: root[2] = bst_delete(root[2], name) else: if root[1] is None: return root[2] elif root[2] is None: return root[1] else: succ = bst_find_min(root[2]) root[0] = succ[0] root[2] = bst_delete(root[2], succ[0]["name"]) return root def bst_list_all(root): def inorder(node): if node is None: return [] return inorder(node[1]) + [node[0]] + inorder(node[2]) return inorder(root) if __name__ == "__main__": print('cba')