задание 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