编写自定义集合,实现使用双向链表进行添加、删除、查询、修改元素
时间: 2024-01-26 14:05:04 浏览: 24
好的,下面是一个使用双向链表实现的自定义集合的示例代码:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
self.size = 0
def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
self.size += 1
def remove(self, data):
current = self.head
while current:
if current.data == data:
if current == self.head and current == self.tail:
self.head = None
self.tail = None
elif current == self.head:
self.head = current.next
self.head.prev = None
elif current == self.tail:
self.tail = current.prev
self.tail.next = None
else:
current.prev.next = current.next
current.next.prev = current.prev
self.size -= 1
return True
current = current.next
return False
def find(self, data):
current = self.head
while current:
if current.data == data:
return True
current = current.next
return False
def update(self, old_data, new_data):
current = self.head
while current:
if current.data == old_data:
current.data = new_data
return True
current = current.next
return False
def __len__(self):
return self.size
def __str__(self):
values = []
current = self.head
while current:
values.append(current.data)
current = current.next
return "->".join(str(value) for value in values)
```
在这个示例代码中,我们首先定义了一个 `Node` 类以表示双向链表中的一个节点。每个节点包含一个数据项,以及两个指向前一个和后一个节点的指针。然后定义了一个 `DoublyLinkedList` 类,它包含了双向链表的常用操作方法,包括 `append`、`remove`、`find` 和 `update` 等。其中,`append` 方法用于向集合中添加元素,`remove` 方法用于从集合中删除元素,`find` 方法用于查找集合中是否存在某个元素,`update` 方法用于更新集合中的元素。最后,我们还重载了 `__len__` 和 `__str__` 方法,分别用于返回集合的长度和以字符串形式输出集合中的元素。