.一个班上有30名学生,每个学生的数据作为一个记录,每个记录包括学号、姓名、三门课程的成绩和三门课程平均成绩。从键盘输入学生的学号、姓名及三门课的成绩。要求打印三门课程平均成绩最高分的学生记录。将程序改为使用链表实现。
时间: 2024-12-03 18:36:38 浏览: 11
在一个班级管理场景中,如果要用链表来实现这个功能,首先我们需要创建一个链表节点(Node),用于存储每个学生的数据。该节点可能包含如下的结构:
```python
class StudentRecord:
def __init__(self, id, name, course_scores):
self.id = id
self.name = name
self.course_scores = course_scores
self.avg_score = sum(course_scores) / len(course_scores)
self.next = None
def get_average_score(self):
return self.avg_score
```
用户输入一个新的学生信息后,可以添加到链表的末尾:
```python
def add_student_to_list(head, student_data):
new_node = StudentRecord(*student_data)
if not head:
head = new_node
else:
current = head
while current.next:
current = current.next
current.next = new_node
return head
```
为了找到平均成绩最高的学生,我们可以遍历链表,并在遍历过程中更新最高平均分及其对应的节点:
```python
def find_highest_avg_student(head):
highest_avg = float('-inf')
highest_avg_student = None
current = head
while current:
if current.get_average_score() > highest_avg:
highest_avg = current.get_average_score()
highest_avg_student = current
current = current.next
return highest_avg_student
# 示例用法
head = None
# 输入并添加学生数据,假设通过循环从键盘获取
while True:
# 用户输入...
# 解析输入并调用add_student_to_list添加新节点
...
highest_student = find_highest_avg_student(head)
if highest_student:
print(f"平均成绩最高的是 {highest_student.name},平均成绩为 {highest_student.avg_score}")
else:
print("没有找到学生记录")
```
阅读全文