本页面介绍了 TheAlgorithms/Python 仓库中基本数据结构的实现。这些实现注重教育清晰性,同时保持功能正确性,提供了抽象数据结构如何在 Python 中实现的具体示例。
这些数据结构是整个仓库中算法的基础组件。有关利用这些结构的算法实现,请参见第 3 页。
数据结构实现架构
核心数据结构类和操作
来源
链表是一种线性数据结构,其中元素存储在节点中,每个节点指向序列中的下一个节点。与数组不同,链表不需要连续的内存分配。
仓库中的所有链表实现都使用一个包含以下内容的 Node 类:
data: 节点中存储的值next_node、previous 等)的引用来源
单向链表是最简单的链表形式,其中每个节点包含数据和指向下一个节点的引用。
关键操作
insert_head(data): 在开头插入 (O(1))insert_tail(data): 在末尾插入(带尾指针时为 O(1))insert_nth(index, data): 在指定位置插入 (O(n))delete_head(): 从开头移除 (O(1))delete_tail(): 从末尾移除 (O(n))delete_nth(index): 从指定位置移除 (O(n))reverse(): 反转列表 (O(n))该实现还支持 Python 的内置操作
len(linked_list): 获取列表长度for item in linked_list: 遍历列表str(linked_list): 字符串表示来源
双向链表通过添加对前一个节点的引用来扩展单向链表,从而允许双向遍历。
关键操作
insert_at_head(data): 在开头插入insert_at_tail(data): 在末尾插入insert_at_nth(index, data): 在指定位置插入delete_head(): 从开头移除delete_tail(): 从末尾移除delete_at_nth(index): 从指定位置移除delete(data): 移除具有指定数据的第一个节点DoublyLinkedList 类维护 head 和 tail 指针,以便在列表两端进行高效操作。
来源
循环链表是一种变体,其中最后一个节点指向第一个节点,形成一个环。
关键操作
insert_head(data): 在开头插入insert_tail(data): 在末尾插入insert_nth(index, data): 在指定位置插入delete_front(): 从开头移除delete_tail(): 从末尾移除delete_nth(index): 从指定位置移除CircularLinkedList 类维护 head 和 tail 指针,其实现确保 tail.next_node 始终指向 head。
来源
该仓库包含多个链表实用函数
has_loop 属性使用集合来跟踪已访问的节点,以检测链表是否包含循环。
来源
swap_nodes 方法根据数据值交换链表中两个节点的位置。
来源
middle_element 方法使用“慢快指针”技术,一次遍历即可找到链表的中间节点。
来源
reverse 方法反转链表中节点的顺序。
来源
merge_lists 函数将两个已排序的链表合并为一个新的已排序链表。
来源
二叉树是一种层次数据结构,其中每个节点最多有两个子节点。
该仓库实现了二叉搜索树(BST),一种特殊的二叉树,其中:
关键操作
insert(*values): 将值插入二叉搜索树search(value): 查找具有给定值的节点get_max(): 获取最大值节点get_min(): 获取最小值节点remove(value): 删除具有给定值的节点traversal_tree(): 遍历树(前序、中序或后序)find_kth_smallest(k, node): 查找第 k 小的元素遍历方法
preorder_traverse: 访问节点,然后左子树,然后右子树inorder: 访问左子树,然后节点,然后右子树(对于二叉搜索树返回排序顺序)postorder: 访问左子树,然后右子树,然后节点来源
来源
来源
TheAlgorithms/Python 仓库中的数据结构实现提供了常见数据结构的清晰、教育性示例。它们旨在兼具功能性和教学性,使其成为学习 Python 数据结构概念的优秀资源。
每个实现都附带了详尽的文档字符串(docstrings)和单元测试(doctests),既提供了文档也验证了预期行为。代码遵循一致的模式和地道的 Python 风格,使其对不同水平的学习者都易于理解。