使用ordereddict实现Python中的双向链表操作
发布时间:2023-12-28 05:52:24
在Python中,OrderedDict是一种有序字典,它继承自dict,除了保留键-值对的插入顺序外,还支持一些与顺序相关的操作。OrderedDict可以用来实现基本的双向链表数据结构。
首先,我们需要导入collections模块,OrderedDict是该模块的一部分。
from collections import OrderedDict
接下来,我们创建一个空的OrderedDict对象,并定义一些基本的操作方法。
class DoublyLinkedList:
def __init__(self):
self.linked_list = OrderedDict()
def is_empty(self):
return len(self.linked_list) == 0
def add_front(self, key, value):
self.linked_list.pop(key, None)
self.linked_list[key] = value
def add_rear(self, key, value):
self.linked_list.pop(key, None)
self.linked_list.move_to_end(key, last=False)
self.linked_list[key] = value
def remove_front(self):
if not self.is_empty():
return self.linked_list.popitem(last=False)
def remove_rear(self):
if not self.is_empty():
return self.linked_list.popitem(last=True)
def display(self):
print(list(self.linked_list.keys()))
上述代码中,DoublyLinkedList类有一个linked_list成员变量,它是一个OrderedDict对象,用于存储双向链表的数据。is_empty方法检查链表是否为空。add_front方法用于在链表的前端添加一个键-值对,如果指定的键已存在,则先将其从字典中移除,再将其添加到字典的末尾。add_rear方法用于在链表的后端添加一个键-值对,首先将指定的键从字典中移除,然后再将其插入字典的开头。remove_front方法用于移除链表的 个键-值对,并返回该键-值对。remove_rear方法用于移除链表的最后一个键-值对,并返回该键-值对。display方法用于打印链表中所有的键。
下面是一些使用DoublyLinkedList类的示例:
# 创建一个双向链表对象
linked_list = DoublyLinkedList()
# 向链表的前端添加键-值对
linked_list.add_front('A', 1)
linked_list.add_front('B', 2)
linked_list.add_front('C', 3)
# 打印链表中的键
linked_list.display() # ['C', 'B', 'A']
# 向链表的后端添加键-值对
linked_list.add_rear('D', 4)
linked_list.add_rear('E', 5)
# 打印链表中的键
linked_list.display() # ['E', 'D', 'C', 'B', 'A']
# 移除链表的 个键-值对
removed_item = linked_list.remove_front()
print(removed_item) # ('E', 5)
# 打印链表中的键
linked_list.display() # ['D', 'C', 'B', 'A']
# 移除链表的最后一个键-值对
removed_item = linked_list.remove_rear()
print(removed_item) # ('A', 1)
# 打印链表中的键
linked_list.display() # ['D', 'C', 'B']
上述示例演示了如何使用DoublyLinkedList类创建一个双向链表,并对其进行添加和移除操作。使用OrderedDict实现双向链表可确保键-值对的顺序与其在链表中的顺序一致。
