设计一个完整的程序,根据用户输入学生的人数n(n>2)以及每个学生的学号、姓名和成绩建立一个单链表,统计单链表存储的学生人数,输出所有学生信息,删除指定位置的元素。
时间: 2024-06-12 10:08:07 浏览: 41
单链表进行学生信息管理
以下是一个Python程序的实现:
```python
class Student:
def __init__(self, id, name, score):
self.id = id
self.name = name
self.score = score
self.next = None
class StudentList:
def __init__(self):
self.head = None
self.length = 0
def add(self, id, name, score):
new_student = Student(id, name, score)
if self.head is None:
self.head = new_student
else:
current_student = self.head
while current_student.next is not None:
current_student = current_student.next
current_student.next = new_student
self.length += 1
def show_all(self):
current_student = self.head
while current_student is not None:
print("学号:{},姓名:{},成绩:{}".format(current_student.id, current_student.name, current_student.score))
current_student = current_student.next
def delete(self, index):
if index < 0 or index >= self.length:
print("错误:索引越界")
return
if index == 0:
self.head = self.head.next
else:
current_student = self.head
for i in range(index-1):
current_student = current_student.next
current_student.next = current_student.next.next
self.length -= 1
if __name__ == "__main__":
n = int(input("请输入学生人数:"))
if n <= 2:
print("错误:学生人数应大于2")
else:
student_list = StudentList()
for i in range(n):
id = input("请输入第{}个学生的学号:".format(i+1))
name = input("请输入第{}个学生的姓名:".format(i+1))
score = float(input("请输入第{}个学生的成绩:".format(i+1)))
student_list.add(id, name, score)
print("学生人数:{}".format(student_list.length))
student_list.show_all()
index = int(input("请输入要删除的学生的索引(从0开始):"))
student_list.delete(index)
print("删除后,学生人数:{}".format(student_list.length))
student_list.show_all()
```
该程序首先定义了一个`Student`类,表示一个学生的信息。其中包含学号、姓名、成绩和指向下一个学生的指针。然后定义了一个`StudentList`类,表示整个学生的单链表。其中包括链表的头指针和链表中学生的数量。该类具有三个方法:
- `add`方法:向链表中添加一个新的学生,该方法接受学号、姓名和成绩作为参数,创建一个新的`Student`对象,并将其加入链表末尾。
- `show_all`方法:输出链表中所有学生的信息。
- `delete`方法:从链表中删除指定索引的学生,该方法接受一个整数作为参数,表示要删除的学生在链表中的位置(从0开始计数)。
程序的主体部分首先获取用户输入的学生人数`n`,然后循环`n`次,每次获取一个学生的学号、姓名和成绩,创建一个新的`Student`对象,并将其加入链表中。然后输出链表中所有学生的信息。接着获取用户要删除的学生的索引,并调用`delete`方法将其从链表中删除。最后再次输出链表中所有学生的信息。
阅读全文