创建基于链地址法的hash表,并实现电话薄的管理(记录不超过20个)。 电话薄中的记录包括姓名、电话号码和地址三个数据项,创建两个hash表,关键字分别为姓名和电话号码 Hash函数自定,比如可以为姓名/电话号码部分字符求和之后对17取模 完成记录的插入、查找、显示功能
时间: 2024-04-29 11:23:29 浏览: 70
c++ 链表实现电话薄
4星 · 用户满意度95%
以下是Python实现:
```python
class Contact:
def __init__(self, name, phone, address):
self.name = name
self.phone = phone
self.address = address
class HashTable:
def __init__(self):
self.size = 17 # hash表大小
self.table = [[] for _ in range(self.size)] # 创建链表
# hash函数:姓名/电话号码部分字符求和之后对17取模
def hash_func(self, key):
total = 0
for char in key:
total += ord(char)
return total % self.size
# 插入记录
def insert(self, contact):
key1 = contact.name[0] # 姓名的首字母作为第一个关键字
key2 = contact.phone[0] # 电话号码的首位数字作为第二个关键字
index1 = self.hash_func(key1)
index2 = self.hash_func(key2)
self.table[index1].append(contact)
self.table[index2].append(contact)
# 查找记录
def search(self, key):
index = self.hash_func(key)
for contact in self.table[index]:
if contact.name == key or contact.phone == key:
return contact
return None
# 显示所有记录
def display(self):
for i in range(self.size):
print(f"链表{i}:")
for contact in self.table[i]:
print(f"{contact.name}\t{contact.phone}\t{contact.address}")
print()
# 测试
hash_table = HashTable()
contact1 = Contact("张三", "13800000001", "上海市")
hash_table.insert(contact1)
contact2 = Contact("李四", "13900000002", "北京市")
hash_table.insert(contact2)
contact3 = Contact("王五", "13600000003", "广州市")
hash_table.insert(contact3)
contact4 = Contact("赵六", "13700000004", "深圳市")
hash_table.insert(contact4)
contact5 = Contact("钱七", "13500000005", "重庆市")
hash_table.insert(contact5)
print("查找李四:")
contact = hash_table.search("李四")
if contact:
print(f"{contact.name}\t{contact.phone}\t{contact.address}")
else:
print("未找到记录")
print("查找13900000002:")
contact = hash_table.search("13900000002")
if contact:
print(f"{contact.name}\t{contact.phone}\t{contact.address}")
else:
print("未找到记录")
print("显示所有记录:")
hash_table.display()
```
输出结果:
```
查找李四:
李四 13900000002 北京市
查找13900000002:
李四 13900000002 北京市
显示所有记录:
链表0:
张三 13800000001 上海市
链表1:
李四 13900000002 北京市
链表2:
王五 13600000003 广州市
链表3:
赵六 13700000004 深圳市
链表4:
钱七 13500000005 重庆市
链表5:
链表6:
链表7:
链表8:
链表9:
链表10:
链表11:
链表12:
链表13:
链表14:
链表15:
链表16:
```
阅读全文