2026-rff_mp/lukovnikovde/docs/data/DataStructure.py

158 lines
4.7 KiB
Python
Raw Normal View History

import random as rnd
#############################################################################################
2026-05-01 14:59:57 +00:00
def sort_list(name_list):
l = len(name_list)
for i in range(l - 1):
for j in range(l - i - 1):
if name_list[j][0] > name_list[j + 1][0]:
name_list[j][0], name_list[j + 1][0] = name_list[j + 1][0], name_list[j][0]
return name_list
###########################################################################################################################
def ll_insert(head, name, phone):
next_node = {'name': name, 'phone': phone, 'next': None}
if head is None: return next_node
running = head
while running is not None:
if running['name'] == name:
running['phone'] = phone
return head
running = running['next']
running = head
while running['next'] is not None: running = running['next']
running['next'] = next_node
return head
2026-04-22 14:04:25 +00:00
def ll_find(head, name):
running = head
2026-04-22 16:50:01 +00:00
while True:
2026-04-22 14:04:25 +00:00
if running['name'] == name:
return running['phone']
running = running['next']
2026-04-22 16:50:01 +00:00
if running is None: break
2026-04-22 14:04:25 +00:00
return None
2026-04-22 16:50:01 +00:00
def ll_delete(head, name):
running = head
if running['name'] == name:
return head['next']
while running['next']['name'] != name:
running = running['next']
if running['next']['next'] is None:
if running['next']['name'] != name:
return head
if running['next']['next'] is None:
running['next'] = None
else: running['next'] = running['next']['next']
return head
def ll_list_all(head):
name_list = []
running = head
while running is not None:
name_list.append([running['name'], running['phone']])
running = running['next']
return name_list
2026-04-22 16:50:01 +00:00
2026-05-01 14:59:57 +00:00
################################################################################################################################
2026-04-22 14:04:25 +00:00
2026-05-01 13:48:41 +00:00
def LinkedList(head):
2026-04-22 14:04:25 +00:00
print('======== TESTING LL_INSERT ==========')
2026-05-01 13:48:41 +00:00
Name = ['Dima', 'Ivan', 'Maxim', 'Alex', 'Olga', 'Lena']
2026-04-22 14:04:25 +00:00
for _ in range(10):
2026-05-01 13:48:41 +00:00
name = Name[rnd.randint(0, len(Name) - 1)]
2026-04-22 14:04:25 +00:00
phone = str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + '-' + \
str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + str(rnd.randint(0,9))
print(name, phone)
head = ll_insert(head, name, phone)
print(head)
print('-----------------------------------\n')
2026-05-01 13:48:41 +00:00
print('======== END TESTING ================\n\n')
2026-04-22 14:04:25 +00:00
print('======== TESTING LL_FIND ==========')
Name.append('Masha')
for i in range(len(Name)):
name = Name[i]
print(name, ":", ll_find(head, name))
2026-05-01 13:48:41 +00:00
print("======== END TESTING =============\n\n")
2026-04-22 14:04:25 +00:00
print("============ TESTING LL_LIST_ALL AND SORT_LIST =============")
print(*sort_list(ll_list_all(head)))
2026-05-01 13:48:41 +00:00
print("============ END TESTING ===============\n\n")
2026-04-22 16:50:01 +00:00
print('========== TESTING LL_DELETE ==========')
for _ in range(2):
name = Name[rnd.randint(0, 4)]
head = ll_delete(head, name)
print(head)
print(name, ":", ll_find(head, name))
2026-05-01 13:48:41 +00:00
print("========= END TESTING ==============\n\n")
#########################################################################################################
2026-05-01 14:59:57 +00:00
def ht_insert(buckest, name, phone):
index = sum(ord(ch) for ch in name) % 10
for i, (Name, Phone) in enumerate(buckest[index]):
if Name == name:
buckest[index][i] = (name, phone)
return buckest
buckest[index].append((name, phone))
return buckest
2026-04-22 14:04:25 +00:00
2026-05-01 13:48:41 +00:00
####################################################################################################
2026-05-01 13:48:41 +00:00
def HashTable(head):
2026-05-01 13:48:41 +00:00
print('=========== TESTING HT_INSERT =============')
Name = ['Dima', 'Alex', 'Ivan', 'Maxim', 'Olga', 'Lena']
2026-05-01 13:48:41 +00:00
for _ in range(10):
name = Name[rnd.randint(0, len(Name) - 1)]
phone = str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + '-' + \
str(rnd.randint(0,9)) + str(rnd.randint(0,9)) + str(rnd.randint(0,9))
2026-05-01 13:48:41 +00:00
print(name, phone)
head = ht_insert(head, name, phone)
print(head)
print('-----------------------------------------------------\n')
print('============= END TESTING =====================\n\n')
2026-05-01 14:59:57 +00:00
""" Name.append('Masha')
for i in range(len(Name)):
name = Name[i]
print(name, ":", ht_find(head, name))
print("======== END TESTING =============\n\n")
"""
2026-05-01 13:48:41 +00:00
#################################################################################################
def main():
LinkedList(None)
2026-05-01 14:59:57 +00:00
HashTable([[] for _ in range(10)])
2026-04-22 14:04:25 +00:00
if __name__ == "__main__":
main()