Python教程:一文了解10种数据结构在Python中的实现方法

简介: 数据结构是计算机科学中非常重要的概念,它用于组织和存储数据,使得数据可以高效地被访问和操作。在编程中,选择合适的数据结构对于解决问题和提高程序性能至关重要。

数据结构是计算机科学中非常重要的概念,它用于组织和存储数据,使得数据可以高效地被访问和操作。在编程中,选择合适的数据结构对于解决问题和提高程序性能至关重要。

常见的数据结构包括:

  1. 数组 (Array):是一种线性数据结构,由一组连续的内存空间组成,用于存储相同类型的元素。数组支持随机访问,但插入和删除操作可能比较耗时,时间复杂度为 O(n)。
  2. 链表 (Linked List):是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的引用。链表分为单向链表和双向链表,插入和删除操作比较灵活,时间复杂度为 O(1),但访问元素需要遍历链表,时间复杂度为 O(n)。
  3. 栈 (Stack):是一种后进先出(LIFO)的数据结构,只允许在一端进行插入和删除操作,通常用于处理函数调用、表达式求值等场景。
  4. 队列 (Queue):是一种先进先出(FIFO)的数据结构,允许在一端进行插入操作,在另一端进行删除操作,通常用于实现广度优先搜索、任务调度等场景。
  5. 树 (Tree):是一种非线性数据结构,由节点和边组成,每个节点最多有一个父节点和多个子节点。常见的树包括二叉树、二叉搜索树、平衡二叉树等。
  6. 图 (Graph):是一种非线性数据结构,由节点(顶点)和边组成,用于表示多对多的关系。图可以分为有向图和无向图,常见的图算法包括深度优先搜索(DFS)、广度优先搜索(BFS)等。
  7. 堆 (Heap):是一种特殊的树形数据结构,通常用于实现优先队列。堆分为最大堆和最小堆,支持插入、删除最大(最小)元素等操作,常见的应用包括堆排序、Dijkstra 算法等。
  8. 哈希表 (Hash Table):是一种根据关键字直接访问值的数据结构,通过哈希函数将关键字映射到存储位置,从而实现快速的查找、插入和删除操作,平均时间复杂度为 O(1)。
  9. 并查集 (Disjoint Set Union):是一种用于处理不相交集合的数据结构,支持合并集合和查找集合操作,常用于求解连通性问题。
  10. 字典 (Dictionary):是一种键值对的数据结构,通过键快速查找对应的值,常见的实现方式包括哈希表、平衡二叉树等。

不同的数据结构适用于不同的场景和问题,选择合适的数据结构可以提高程序的效率和性能。

以下是Python中实现常见数据结构的简单示例代码:

数组(Array):

class Array:
    def __init__(self):
        self.array = []
    def append(self, value):
        self.array.append(value)
    def get(self, index):
        return self.array[index]
    def length(self):
        return len(self.array)
# 示例用法
arr = Array()
arr.append(1)
arr.append(2)
print(arr.get(0))  # 输出: 1
print(arr.length())  # 输出: 2

image.gif

链表(Linked List):

class ListNode:
    def __init__(self, value):
        self.value = value
        self.next = None
class LinkedList:
    def __init__(self):
        self.head = None
    def append(self, value):
        if not self.head:
            self.head = ListNode(value)
            return
        curr = self.head
        while curr.next:
            curr = curr.next
        curr.next = ListNode(value)
    # 其他操作方法可根据需要实现
# 示例用法
ll = LinkedList()
ll.append(1)
ll.append(2)

image.gif

栈(Stack):

class Stack:
    def __init__(self):
        self.stack = []
    def push(self, value):
        self.stack.append(value)
    def pop(self):
        if self.stack:
            return self.stack.pop()
        else:
            return None
# 示例用法
stack = Stack()
stack.push(1)
stack.push(2)
print(stack.pop())  # 输出: 2

image.gif

队列(Queue):

from collections import deque
class Queue:
    def __init__(self):
        self.queue = deque()
    def enqueue(self, value):
        self.queue.append(value)
    def dequeue(self):
        if self.queue:
            return self.queue.popleft()
        else:
            return None
# 示例用法
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
print(queue.dequeue())  # 输出: 1

image.gif

树(Tree):

class TreeNode:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
# 示例用法
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)

image.gif

图(Graph): 在Python中通常使用邻接表或邻接矩阵表示图,具体实现较为复杂,这里提供一个简单的邻接表示例。

class Graph:
    def __init__(self):
        self.graph = {}
    def add_edge(self, u, v):
        if u not in self.graph:
            self.graph[u] = []
        self.graph[u].append(v)
# 示例用法
graph = Graph()
graph.add_edge(0, 1)
graph.add_edge(0, 2)
graph.add_edge(1, 2)

image.gif

堆(Heap): Python内置的heapq模块提供了堆的实现。

import heapq
# 创建最小堆
heap = []
heapq.heappush(heap, 2)
heapq.heappush(heap, 1)
heapq.heappush(heap, 3)
print(heapq.heappop(heap))  # 输出: 1

image.gif

哈希表(Hash Table): 在Python中,字典(dict)数据类型就是一种哈希表的实现。

hash_table = {}
hash_table['key1'] = 'value1'
hash_table['key2'] = 'value2'
print(hash_table['key1'])  # 输出: value1

image.gif

并查集(Disjoint Set Union): 可以使用UnionFind类来实现并查集。

class UnionFind:
    def __init__(self, n):
        self.parent = list(range(n))
        self.rank = [0] * n
    def find(self, x):
        if self.parent[x] != x:
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]
    def union(self, x, y):
        root_x = self.find(x)
        root_y = self.find(y)
        if root_x != root_y:
            if self.rank[root_x] > self.rank[root_y]:
                self.parent[root_y] = root_x
            elif self.rank[root_x] < self.rank[root_y]:
                self.parent[root_x] = root_y
            else:
                self.parent[root_y] = root_x
                self.rank[root_x] += 1
# 示例用法
uf = UnionFind(5)
uf.union(0, 1)
uf.union(2, 3)
print(uf.find(1) == uf.find(2))  # 输出: False

image.gif

字典(Dictionary): Python内置的dict就是字典的实现。

dictionary = {'key1': 'value1', 'key2': 'value2'}
print(dictionary['key1'])  # 输出: value1

image.gif

这些数据结构在实际工作中的应用非常广泛,不同的数据结构适用于不同的场景,以下是一些常见的应用场景:

  1. 数组(Array):
  • 顺序存储数据,适合快速随机访问元素的场景,例如需要实现索引查找、追加等操作的场景。
  • 在需要高效的内存使用情况下,因为数组在内存中是连续存储的。
  1. 链表(Linked List):
  • 插入和删除操作频繁的场景,因为链表对插入和删除操作的开销较小。
  • 不需要随机访问元素,只需要顺序访问的场景。
  1. 栈(Stack):
  • 后进先出(LIFO)的场景,例如函数调用栈、表达式求值、括号匹配等。
  1. 队列(Queue):
  • 先进先出(FIFO)的场景,例如任务调度、消息队列、广度优先搜索等。
  1. 树(Tree):
  • 层次结构的数据存储和操作,例如文件系统、组织结构、XML/JSON解析等。
  • 用于实现搜索算法,例如二叉搜索树、平衡二叉树等。
  1. 图(Graph):
  • 表示网络结构,例如社交网络、路由器网络、网页链接等。
  • 用于解决复杂的路径查找、最短路径、最小生成树等问题。
  1. 堆(Heap):
  • 优先级队列的实现,例如任务调度、事件处理等。
  1. 哈希表(Hash Table):
  • 快速的查找、插入和删除操作,例如数据库索引、缓存实现、唯一性检查等。
  1. 并查集(Disjoint Set Union):
  • 维护元素的等价关系,例如图的连通性判断、社交网络中的好友关系等。
  1. 字典(Dictionary):
  • 键值对存储和快速查找的场景,例如缓存实现、配置管理、数据索引等。

在实际工作中,往往会根据具体的需求选择合适的数据结构来实现功能,同时也可能会结合多种数据结构来解决复杂的问题。

目录
相关文章
|
11天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
22天前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
197 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
26天前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
32 10
|
28天前
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
69 21
|
2月前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
132 66
|
2月前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
70 20
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
87 8
|
2月前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
57 4
|
2月前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
155 7
|
2月前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
64 5

热门文章

最新文章

推荐镜像

更多