如何使用单链表数据结构设计一个包含输入、搜索、添加、删除、修改和显示功能的通讯录系统?
时间: 2024-10-24 08:02:22 浏览: 17
使用单链表数据结构设计一个通讯录系统可以按照以下步骤进行:
1. **数据结构**:
- 定义一个Node类,表示链表中的节点,包含姓名(Name)、电话号码(PhoneNumber)以及指向下一个节点的引用(next)。
```
class Node:
def __init__(self, name, phone_number):
self.name = name
self.phone_number = phone_number
self.next = None
```
2. **初始化**:
- 创建一个`PhoneBook`类,包含一个头节点(head)作为链表的起点。
3. **输入功能(添加)**:
- `add_contact(name, phone_number)`方法,接受新联系人的信息,创建一个新的节点并插入到链表合适的位置(如按字母顺序排序)。
4. **搜索功能**:
- `search_by_name(name)`或`search_by_phone(phone_number)`方法,遍历链表查找指定名称或电话号码的节点。
5. **删除功能**:
- `delete_contact(name)`或`delete_by_phone(phone_number)`方法,找到目标节点并移除它。如果要保持列表有序,需调整相邻节点的引用。
6. **修改功能**:
- `update_contact(old_name, new_info)`方法,找到旧名称对应的节点,更新其信息。
7. **显示功能**:
- `display()`方法,打印整个通讯录链表的内容,展示所有联系人及其信息。
8. **遍历与操作**:
- 使用while循环和当前节点指针(current)访问和操作链表,确保处理边界条件(比如查找最后一个节点或到达链表末尾)。
示例代码片段(简化版):
```python
class PhoneBook:
def __init__(self):
self.head = None
# 添加、搜索、删除等方法省略...
def display(self):
current = self.head
if current:
while current.next:
print(f"{current.name}: {current.phone_number}")
current = current.next
print(f"{current.name}: {current.phone_number}")
# 实例化并使用 PhoneBook 对象
phone_book = PhoneBook()
phone_book.add_contact("张三", "13812345678")
phone_book.display() # 显示初始联系人
```
阅读全文