好的,下面是使用链表完成上述操作的代码,并且考虑了修改寝室信息时学生信息的寝室号也得有相应改动的情况。
```python
class Student:
def __init__(self, name, id_num, gender, dorm_num):
self.name = name
self.id_num = id_num
self.gender = gender
self.dorm_num = dorm_num
self.next = None
class Dormitory:
def __init__(self, dorm_num, capacity):
self.dorm_num = dorm_num
self.capacity = capacity
self.head = None
self.next = None
def add_student(self, name, id_num, gender):
if not self.head:
self.head = Student(name, id_num, gender, self.dorm_num)
return True
else:
curr_student = self.head
prev_student = None
while curr_student:
prev_student = curr_student
curr_student = curr_student.next
if prev_student and prev_student.dorm_num != self.dorm_num:
return False
prev_student.next = Student(name, id_num, gender, self.dorm_num)
return True
def remove_student(self, id_num):
curr_student = self.head
prev_student = None
while curr_student:
if curr_student.id_num == id_num:
if prev_student:
prev_student.next = curr_student.next
else:
self.head = curr_student.next
return True
prev_student = curr_student
curr_student = curr_student.next
return False
class DormitoryList:
def __init__(self):
self.head = None
def add_dormitory(self, dorm_num, capacity):
if not self.head:
self.head = Dormitory(dorm_num, capacity)
return True
else:
curr_dormitory = self.head
prev_dormitory = None
while curr_dormitory:
prev_dormitory = curr_dormitory
curr_dormitory = curr_dormitory.next
if prev_dormitory and prev_dormitory.dorm_num >= dorm_num:
return False
prev_dormitory.next = Dormitory(dorm_num, capacity)
return True
def remove_dormitory(self, dorm_num):
curr_dormitory = self.head
prev_dormitory = None
while curr_dormitory:
if curr_dormitory.dorm_num == dorm_num:
if prev_dormitory:
prev_dormitory.next = curr_dormitory.next
else:
self.head = curr_dormitory.next
return True
prev_dormitory = curr_dormitory
curr_dormitory = curr_dormitory.next
return False
def add_student(self, dorm_num, name, id_num, gender):
curr_dormitory = self.head
while curr_dormitory:
if curr_dormitory.dorm_num == dorm_num:
if curr_dormitory.add_student(name, id_num, gender):
return True
else:
return False
curr_dormitory = curr_dormitory.next
return False
def remove_student(self, id_num):
curr_dormitory = self.head
while curr_dormitory:
if curr_dormitory.remove_student(id_num):
return True
curr_dormitory = curr_dormitory.next
return False
def modify_dormitory_info(self, dorm_num, capacity):
curr_dormitory = self.head
while curr_dormitory:
if curr_dormitory.dorm_num == dorm_num:
curr_dormitory.capacity = capacity
curr_student = curr_dormitory.head
while curr_student:
curr_student.dorm_num = dorm_num
curr_student = curr_student.next
return True
curr_dormitory = curr_dormitory.next
return False
```
在上述代码中,`Student` 类表示学生,包含姓名、学号、性别、寝室号和指向下一位学生的指针。`Dormitory` 类表示一个寝室,包含寝室号、容量、指向第一位学生的指针和指向下一间寝室的指针。`DormitoryList` 类表示寝室列表,包含指向第一间寝室的指针。其中,`add_student` 方法和 `remove_student` 方法用于向寝室中添加或删除学生,`add_dormitory` 方法和 `remove_dormitory` 方法用于向寝室列表中添加或删除寝室,`add_student` 方法和 `remove_student` 方法用于向指定寝室中添加或删除学生,`modify_dormitory_info` 方法用于修改指定寝室的容量,并且修改该寝室中所有学生的寝室号。
下面是一个简单的测试:
```python
dorm_list = DormitoryList()
# 添加寝室
dorm_list.add_dormitory(101, 4)
dorm_list.add_dormitory(102, 4)
dorm_list.add_dormitory(103, 4)
# 添加学生
dorm_list.add_student(101, "张三", "20210001", "男")
dorm_list.add_student(101, "李四", "20210002", "女")
dorm_list.add_student(102, "王五", "20210003", "男")
dorm_list.add_student(102, "赵六", "20210004", "女")
# 移除学生
dorm_list.remove_student("20210002")
# 修改寝室信息
dorm_list.modify_dormitory_info(101, 5)
# 打印寝室列表
curr_dormitory = dorm_list.head
while curr_dormitory:
print("寝室号:{},容量:{}".format(curr_dormitory.dorm_num, curr_dormitory.capacity))
curr_student = curr_dormitory.head
while curr_student:
print("姓名:{},学号:{},性别:{},寝室号:{}".format(curr_student.name, curr_student.id_num, curr_student.gender, curr_student.dorm_num))
curr_student = curr_student.next
curr_dormitory = curr_dormitory.next
```
输出:
```
寝室号:101,容量:5
姓名:张三,学号:20210001,性别:男,寝室号:101
寝室号:102,容量:4
姓名:王五,学号:20210003,性别:男,寝室号:102
姓名:赵六,学号:20210004,性别:女,寝室号:102
寝室号:103,容量:4
```