利用单向循环链表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找
时间: 2023-09-30 16:09:04 浏览: 58
好的,以下是单向循环链表实现班级学生信息管理的代码示例。
```python
class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
self.next = None
class StudentList:
def __init__(self):
self.head = None
# 添加学生信息
def add_student(self, name, age, score):
student = Student(name, age, score)
if not self.head:
self.head = student
student.next = self.head
else:
current = self.head
while current.next != self.head:
current = current.next
current.next = student
student.next = self.head
# 删除学生信息
def remove_student(self, name):
if not self.head:
return False
if self.head.name == name:
if self.head == self.head.next:
self.head = None
else:
current = self.head
while current.next != self.head:
current = current.next
current.next = self.head.next
self.head = self.head.next
return True
current = self.head
while current.next != self.head:
if current.next.name == name:
current.next = current.next.next
return True
current = current.next
return False
# 查找学生信息
def find_student(self, name):
if not self.head:
return None
if self.head.name == name:
return self.head
current = self.head
while current.next != self.head:
if current.next.name == name:
return current.next
current = current.next
return None
# 插入学生信息
def insert_student(self, name, age, score, pos):
student = Student(name, age, score)
if not self.head:
self.head = student
student.next = self.head
return True
current = self.head
count = 1
while count < pos and current.next != self.head:
current = current.next
count += 1
if count == pos:
student.next = current.next
current.next = student
return True
else:
return False
# 排序学生信息
def sort_students(self, reverse=False):
if not self.head:
return
current = self.head
while current.next != self.head:
inner_current = current.next
while inner_current != self.head:
if reverse:
if current.score < inner_current.score:
current.score, inner_current.score = inner_current.score, current.score
current.name, inner_current.name = inner_current.name, current.name
current.age, inner_current.age = inner_current.age, current.age
else:
if current.score > inner_current.score:
current.score, inner_current.score = inner_current.score, current.score
current.name, inner_current.name = inner_current.name, current.name
current.age, inner_current.age = inner_current.age, current.age
inner_current = inner_current.next
current = current.next
# 打印所有学生信息
def print_students(self):
if not self.head:
print("No student found")
else:
current = self.head
print(f"{'Name':<10} {'Age':<5} {'Score':<5}")
print("-" * 25)
print(f"{current.name:<10} {current.age:<5} {current.score:<5}")
while current.next != self.head:
current = current.next
print(f"{current.name:<10} {current.age:<5} {current.score:<5}")
```
上述代码中,`Student` 类表示一个学生对象,包含了学生的姓名、年龄和分数,并且定义了一个指向下一个学生的指针 `next`。
`StudentList` 类表示一个班级学生信息管理类。在该类中定义了 `add_student`、`remove_student`、`find_student`、`insert_student`、`sort_students`、`print_students` 等方法,用于实现添加学生、删除学生、查找学生、插入学生、排序学生、打印所有学生信息等功能。
其中,采用单向循环链表来存储学生信息,头节点的指针 `head` 指向第一个学生,最后一个学生的指针 `next` 指向头节点,形成一个环形链表。
示例代码中提供了一些基本的操作,可以根据需求进行扩展。