import random as rnd ############################################################################################# 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 def ll_find(head, name): running = head while True: if running['name'] == name: return running['phone'] running = running['next'] if running is None: break return None 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 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 LinkedList(head): print('======== TESTING LL_INSERT ==========') Name = ['Dima', 'Ivan', 'Maxim', 'Alex', 'Olga', 'Lena'] 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)) print(name, phone) head = ll_insert(head, name, phone) print(head) print('-----------------------------------\n') print('======== END TESTING ================\n\n') print('======== TESTING LL_FIND ==========') Name.append('Masha') for i in range(len(Name)): name = Name[i] print(name, ":", ll_find(head, name)) print("======== END TESTING =============\n\n") print("============ TESTING LL_LIST_ALL AND SORT_LIST =============") print(*sort_list(ll_list_all(head))) print("============ END TESTING ===============\n\n") 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)) print("========= END TESTING ==============\n\n") ######################################################################################################### def ht_insert(head, name, phone): running = head if running is None: return {name: phone} running[name] = phone return head #################################################################################################### def HashTable(head): print('=========== TESTING HT_INSERT =============') Name = ['Dima', 'Alex', 'Ivan', 'Maxim', 'Olga', 'Lena'] 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)) print(name, phone) head = ht_insert(head, name, phone) print(head) print('-----------------------------------------------------\n') print('============= END TESTING =====================\n\n') ################################################################################################# def main(): LinkedList(None) HashTable(None) if __name__ == "__main__": main()