задание 1
This commit is contained in:
parent
c3131ce0f6
commit
b26bb1d3e7
146
kornevma/main.py
Normal file
146
kornevma/main.py
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
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')
|
||||||
Loading…
Reference in New Issue
Block a user