某学校的图书管理系统中,书本种类信息包括:书号、书名、价格三项属性,且书的种类不超过20。本次实验要求使用双向循环链表示。要求实现的操作:初始化、插入、删除、从某一位置正序及倒序输出所有书本信息
时间: 2024-10-27 20:06:02 浏览: 35
软件工程图书管理系统需求规格说明书.pdf
在图书管理系统中,使用双向循环链表是一种常见的数据结构选择,因为它支持高效的插入和删除操作,并且能够保证书籍信息的顺序存储。以下是关于这个场景的基本设计和实现步骤:
1. **初始化**:
- 创建一个节点类,包含书号、书名和价格属性,以及前驱和后继指针。
- 定义一个BookList类,初始化一个空的双向循环链表,头结点的next和prev都指向自身。
```python
class Node:
def __init__(self, id, title, price):
self.id = id
self.title = title
self.price = price
self.prev = None
self.next = None
class BookList:
def __init__(self):
self.head = Node(0, "无", 0)
self.tail = self.head
self.length = 0
```
2. **插入**:
- 新增书籍时,在尾部添加新节点,然后更新头尾指针。
```python
def insert(self, id, title, price):
if self.length >= 20:
print("已满,无法插入")
return
new_node = Node(id, title, price)
new_node.prev = self.tail
new_node.next = self.head
self.tail.next = new_node
self.tail = new_node
self.length += 1
```
3. **删除**:
- 删除指定位置的节点,需要处理边界情况并调整相邻节点的指针。
```python
def delete(self, index):
if index < 0 or index >= self.length:
print("索引无效")
return
current = self.head
for _ in range(index):
current = current.next
if current == self.head:
self.head = current.next
elif current == self.tail:
self.tail = current.prev
else:
current.prev.next = current.next
current.next.prev = current.prev
self.length -= 1
```
4. **正序输出**:
- 遍历整个链表,按顺序打印每个节点的信息。
```python
def print_sorted(self):
current = self.head
while True:
print(f"{current.id}: {current.title}, 价格: {current.price}")
current = current.next
if current == self.head:
break
```
5. **倒序输出**:
- 可以通过类似的方式遍历链表,但起点设置为尾部。
```python
def print_reversed(self):
current = self.tail
while True:
print(f"{current.id}: {current.title}, 价格: {current.price}")
current = current.prev
if current == self.head:
break
```
阅读全文