• 常见8种数据结构


    常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图,每种数据结构都有其特点,如下:

    1.数组

    特点:

    • 固定大小的线性数据结构
    • 支持快速随机访问
    • 插入和删除效率比较低

    一般应用于需要快速随机访问元素的场景。
    案例:

    # 定义一个数组
    arr = [1, 2 , 3, 4, 5]
    # 访问数组元素
    print(arr[2])  # 输出: 3
    
    # 修改数组元素
    arr[2] = 10
    print(arr)  # 输出: [1, 2, 10, 4, 5]
    
    # 添加元素
    arr.append(6)
    print(arr)  # 输出: [1, 2, 10, 4, 5, 6]
    
    # 删除元素
    arr.pop(2)
    print(arr)  # 输出: [1, 2, 4, 5, 6]
    

    2.链表

    特点:

    • 动态大小的数据结构
    • 插入和删除效率比较高
    • 不支持快速随机访问

    适用于需要频繁插入和删除元素的场景
    案例:

    class Node:
        def __init__(self, data=None):
            self.data = data
            self.next = None
    
    class LinkedList:
        def __init__(self):
            self.head = None
    
        def append(self, data):
            new_node = Node(data)
            if not self.head:
                self.head = new_node
                return
            last = self.head
            while last.next:
                last = last.next
            last.next = new_node
    
        def print_list(self):
            curr = self.head
            while curr:
                print(curr.data, end=" -> ")
                curr = curr.next
            print("None")
    
    # 使用链表
    llist = LinkedList()
    llist.append(1)
    llist.append(2)
    llist.append(3)
    llist.print_list()  # 输出: 1 -> 2 -> 3 -> None
    
    

    3.队列

    特点:

    • 先进先出
    • 插入操作在队尾进行,删除操作在队头进行

    应用于需要先进先出访问元素的场景,如任务调度、消息队列等
    案例:

    from collections import deque
    
    # 使用 deque 实现队列
    queue = deque()
    
    # 入队
    queue.append(1)
    queue.append(2)
    queue.append(3)
    print(queue)  # 输出: deque([1, 2, 3])
    
    # 出队
    print(queue.popleft())  # 输出: 1
    print(queue)  # 输出: deque([2, 3])
    
    

    4.栈

    特点:

    • 先进后出
    • 插入和删除在栈顶进行

    应用于需要后进先出访问元素的场景,如函数调用栈、表达式求值等
    案例:

    # 使用列表实现栈
    stack = []
    
    # 入栈
    stack.append(1)
    stack.append(2)
    stack.append(3)
    print(stack)  # 输出: [1, 2, 3]
    
    # 出栈
    print(stack.pop())  # 输出: 3
    print(stack)  # 输出: [1, 2]
    

    5.树

    特点:

    • 非线性,由节点和边组成
    • 树中的节点有层次关系,一个节点可以有多个子节点

    应用于需要表示层次结构的场景,比如文件系统、组织结构等
    案例:

    
    class TreeNode:
        def __init__(self, data):
            self.data = data
            self.children = []
    
        def add_child(self, child_node):
            self.children.append(child_node)
    
        def print_tree(self, level=0):
            prefix = " " * (level * 4)
            print(prefix + self.data)
            for child in self.children:
                child.print_tree(level + 1)
    
    # 创建树
    root = TreeNode("Root")
    child1 = TreeNode("Child1")
    child2 = TreeNode("Child2")
    child3 = TreeNode("Child3")
    root.add_child(child1)
    root.add_child(child2)
    
    child1.add_child(TreeNode("Grandchild1"))
    child1.add_child(TreeNode("Grandchild2"))
    root.print_tree()
    
    
    

    6.图

    特点:

    • 非线性,由节点和边组成
    • 图中的节点可以通过边来相互连接

    应用于需要表示网络结构的场景,如社交网络、交通网络等。
    案例:

    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)
    
        def print_graph(self):
            for node in self.graph:
                print(f"{node} -> {', '.join(self.graph[node])}")
    
    # 创建图
    g = Graph()
    g.add_edge("A", "B")
    g.add_edge("A", "C")
    g.add_edge("B", "D")
    g.add_edge("C", "D")
    g.print_graph()
    
    

    7.哈希表

    特点:

    • 基于哈希函数实现的键值对数据结构
    • 支持快速的插入、删除和查找操作

    应用于需要快速查找和插入操作的场景,如字典、缓存等。
    案例:

    # 使用字典实现哈希表
    hash_table = {}
    
    # 插入键值对
    hash_table["name"] = "John"
    hash_table["age"] = 30
    hash_table["city"] = "New York"
    print(hash_table)  # 输出: {'name': 'John', 'age': 30, 'city': 'New York'}
    
    # 查找键值对
    print(hash_table["name"])  # 输出: John
    
    # 删除键值对
    del hash_table["age"]
    print(hash_table)  # 输出: {'name': 'John', 'city': 'New York'}
    
    

    8.堆

    特点:

    • 堆是一颗完全二叉树
    • 分为最大堆和最小堆
      • 最大堆:每个节点的值都大于或等于其子节点的值。
      • 最小堆:每个节点的值都小于或等于其子节点的值。
    • 支持快速获取最大值或最小值的操作。

    适用于优先队列,堆排序和实现高效的合并K个有序链表问题。
    案例:

    import heapq
    
    # 创建一个最小堆
    min_heap = []
    
    # 插入元素
    heapq.heappush(min_heap, 3)
    heapq.heappush(min_heap, 1)
    heapq.heappush(min_heap, 4)
    heapq.heappush(min_heap, 2)
    print(min_heap)  # 输出: [1, 2, 4, 3]
    
    # 弹出最小元素
    print(heapq.heappop(min_heap))  # 输出: 1
    print(min_heap)  # 输出: [2, 3, 4]
    
    # 创建一个最大堆(通过将元素取反实现)
    max_heap = []
    heapq.heappush(max_heap, -3)
    heapq.heappush(max_heap, -1)
    heapq.heappush(max_heap, -4)
    heapq.heappush(max_heap, -2)
    print([-x for x in max_heap])  # 输出: [4, 2, 3, 1]
    
    # 弹出最大元素
    print(-heapq.heappop(max_heap))  # 输出: 4
    print([-x for x in max_heap])  # 输出: [3, 2, 1]
    
    
  • 相关阅读:
    flock命令学习
    GIt快速入门(一文学会使用Git)
    Android databinding的接入使用与详解(一)
    【.NET】聊聊 IChangeToken 接口
    OpenCV-Mat类-图像表示
    计算机毕业设计(78)php小程序毕设作品之校园食堂就餐预约小程序系统
    八大排序-python
    Java——JDBC(Java DataBase Connectivity)数据库连接技术
    Python高级语法----深入理解Python协程
    【业务架构】价值实现、价值定位、价值创造
  • 原文地址:https://blog.csdn.net/qq_43575301/article/details/141026488