双向链表创建一个学生成绩数据库
时间: 2023-05-31 22:03:54 浏览: 129
我们可以使用双向链表来创建一个学生成绩数据库。每个节点代表一个学生,包含学生的姓名、学号、课程成绩等信息。每个节点还包含两个指针,分别指向前一个节点和后一个节点。
以下是一个示例代码:
```python
class Node:
def __init__(self, name, id, score):
self.name = name
self.id = id
self.score = score
self.prev = None
self.next = None
class ScoreDB:
def __init__(self):
self.head = None
self.tail = None
def add(self, name, id, score):
node = Node(name, id, score)
if self.head is None:
self.head = node
self.tail = node
else:
node.prev = self.tail
self.tail.next = node
self.tail = node
def remove(self, id):
node = self.find(id)
if node is None:
return
if node.prev is None:
self.head = node.next
else:
node.prev.next = node.next
if node.next is None:
self.tail = node.prev
else:
node.next.prev = node.prev
def find(self, id):
node = self.head
while node is not None and node.id != id:
node = node.next
return node
def print_all(self):
node = self.head
while node is not None:
print(node.name, node.id, node.score)
node = node.next
```
我们可以使用add方法来添加学生信息,使用remove方法来删除学生信息,使用find方法来查找学生信息,使用print_all方法来打印所有学生信息。
例如:
```python
db = ScoreDB()
db.add("Alice", 1, 90)
db.add("Bob", 2, 80)
db.add("Charlie", 3, 70)
db.print_all()
# Output:
# Alice 1 90
# Bob 2 80
# Charlie 3 70
db.remove(2)
db.print_all()
# Output:
# Alice 1 90
# Charlie 3 70
node = db.find(1)
print(node.name, node.id, node.score)
# Output:
# Alice 1 90
```
这个例子中,我们首先创建一个ScoreDB对象,并使用add方法添加三个学生信息。然后使用print_all方法打印所有学生信息。接着使用remove方法删除学号为2的学生信息,再次使用print_all方法打印所有学生信息。最后使用find方法查找学号为1的学生信息,并打印出来。
阅读全文