2026-rff_mp/kornevma/main.py
2026-05-20 20:09:48 +03:00

146 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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')