使用Python实现图书信息表的创建、输出与展示(包括顺序表和链表方式),并完成以下操作:排序、数据修改、反向存储、查找最昂贵的图书、搜索最受喜爱的图书、检索最佳选择的图书、新增图书入库、删除旧书出库、处理重复图书以及区分顺序表和链表的实现方法?
时间: 2024-12-15 12:22:12 浏览: 20
在Python中,我们可以使用列表(顺序表)和链表(链接列表)的数据结构来表示图书信息表。这里我会提供基本的操作示例:
### 1. 使用列表(顺序表)实现:
```python
class BookList:
def __init__(self):
self.books = []
# 添加图书
def add_book(self, title, price, popularity):
self.books.append({"title": title, "price": price, "popularity": popularity})
# 删除图书
def remove_book(self, title):
self.books = [book for book in self.books if book["title"] != title]
# 查找最昂贵的图书
def find_most_expensive(self):
return max(self.books, key=lambda x: x["price"]) if self.books else None
# 搜索最受喜爱的图书
def search_popular(self):
return max(self.books, key=lambda x: x["popularity"])
# 检索最佳选择(价格高但受欢迎度也高)
def best_choice(self):
return sorted(self.books, key=lambda x: (-x["price"], x["popularity"]))[0] if self.books else None
# 示例操作
books = BookList()
books.add_book("贵书", 100, 4)
...
```
### 2. 使用链表实现(需要引入`ListNode`类作为节点):
```python
class Node:
def __init__(self, title, price, popularity):
self.title = title
self.price = price
self.popularity = popularity
self.next = None
class LinkedList(BookList):
def __init__(self):
self.head = None
def add_book(self, *args):
new_node = Node(*args)
if not self.head:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node
... (其他方法类似)
# 示例操作
linked_books = LinkedList()
linked_books.add_book("链表书", 50, 3)
...
```
**注意**:
- 对于排序、查找、搜索等操作,上述例子都假设了按照默认的升序规则进行。如果有特定需求(如降序),可以调整比较函数。
- 反向存储通常通过链表实现,链表支持双向遍历,方便反向访问。
- 处理重复图书:如果需要区分唯一图书,可以在添加书籍时检查是否已存在,如果存在则更新相应属性。
- 区分顺序表和链表:顺序表适合随机访问,而链表更适合频繁插入和删除。
阅读全文