双向链表管理学生数据
时间: 2024-10-17 20:09:04 浏览: 17
双向链表是一种特殊的线性数据结构,它包含两个指针,一个指向当前节点的前一个节点,另一个指向当前节点的下一个节点,使得数据的插入和删除操作更加高效。如果我们要使用双向链表管理学生数据,可以设计一个`StudentNode`类,包含学生的属性(如姓名、学号等),以及两个指针`prev`和`next`。
首先,定义一个`Student`类作为基本的数据实体:
```java
class Student {
String name;
int id;
// 其他学生属性...
public Student(String name, int id) {
this.name = name;
this.id = id;
}
}
```
然后创建`StudentNode`类,用于存储`Student`对象并维护链表结构:
```java
class StudentNode {
Student student;
StudentNode prev;
StudentNode next;
public StudentNode(Student student, StudentNode prev, StudentNode next) {
this.student = student;
this.prev = prev;
this.next = next;
}
}
```
接下来,我们可以定义一个双向链表类`StudentList`,包含链表的头结点和必要的操作方法:
```java
class StudentList {
private StudentNode head;
private StudentNode tail;
// 插入学生到链表头部
public void addStudentAtHead(Student student) {
StudentNode newNode = new StudentNode(student, null, head);
if (head != null) {
head.prev = newNode;
}
head = newNode;
if (tail == null) {
tail = newNode;
}
}
// 删除指定学生
public boolean removeStudentById(int id) {
StudentNode current = head;
while (current != null) {
if (current.student.getId() == id) {
if (current.prev != null) {
current.prev.next = current.next;
} else {
head = current.next;
}
if (current.next != null) {
current.next.prev = current.prev;
} else {
tail = current.prev;
}
return true;
}
current = current.next;
}
return false;
}
// 遍历并打印所有学生
public void printStudents() {
StudentNode temp = head;
while (temp != null) {
System.out.println(temp.student.toString());
temp = temp.next;
}
}
}
```
阅读全文