常见的8种数据结构

简介: 常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图。

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

常见数据结构

1.数组

2.链表

3.队列

4.栈

5.树

6.图

7.哈希表

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个有序链表问题。

相关文章
|
消息中间件 安全 Kafka
一文搞懂Kafka中的listeners配置策略
1. listeners中的plaintext controller external是什么意思? 2. Kraft模式下controller和broker有何区别? 3. 集群节点之间同步什么数据,通过哪个端口,是否可以自定义端口? 4. 客户端通过哪个端口连接到kafka,通过9092连接的是什么,broker还是controller? 5. 为controller配置了单独的端口有什么用? 6. control.plane.listener.name与controller.listener.names有何区别?
3649 2
|
存储 索引
数据结构(顺序结构、链式结构、索引结构、散列结构)
数据结构(顺序结构、链式结构、索引结构、散列结构)
|
9月前
|
人工智能 自然语言处理 API
2026年OpenClaw(Clawdbot)零基础接入WhatsApp保姆级教程
在2026年AI自动化办公与跨境沟通需求双重爆发的当下,OpenClaw(原Clawdbot、曾用名Moltbot)凭借“自然语言驱动、全场景任务自动化、多终端无缝适配”的核心优势,成为个人办公提效、跨境团队协同、轻量客户服务的优选工具。作为GitHub星标量超19万的开源AI自动化代理平台,它打破了传统AI仅能对话的局限,真正实现“能听指令、能做实事”——无论是文档生成、日程提醒、文件整理,还是联网搜索、简单代码开发、跨工具协同,只需一句口语化指令,就能自动完成全流程操作,无需手动干预,完美适配现代办公与跨境沟通的高效需求。
1399 19
|
6月前
|
人工智能 安全 数据挖掘
密钥配置+报错排查|OpenClaw 适配DeepSeek完整教程
本教程为OpenClaw(v2.6.4/v2.6.6)对接DeepSeek大模型的零基础图文指南,涵盖实名认证、API密钥创建、配置测试及模型选用全流程,步骤清晰、截图详实,助Windows用户10分钟完成安全稳定接入。(239字)
密钥配置+报错排查|OpenClaw 适配DeepSeek完整教程
|
Linux Android开发 iOS开发
Escrcpy手机投屏工具!Scrcpy最全安装指南教程!
Escrcpy是一款开源免费的安卓投屏工具,支持Windows、macOS、Linux,无需Root,无广告。可实现低延迟(35-70ms)、高帧率(120fps)投屏,支持键鼠控制、文件互传、录屏截图,适用于办公、游戏、开发等场景。
3591 1
|
NoSQL Java 关系型数据库
Java 从入门到进阶完整学习路线图规划与实战开发最佳实践指南
本文为Java开发者提供从入门到进阶的完整学习路线图,涵盖基础语法、面向对象、数据结构与算法、并发编程、JVM调优、主流框架(如Spring Boot)、数据库操作(MySQL、Redis)、微服务架构及云原生开发等内容,并结合实战案例与最佳实践,助力高效掌握Java核心技术。
1316 2
|
人工智能 数据可视化 搜索推荐
免费+数据安全!手把手教你在PC跑DeepSeek-R1大模型,小白也能秒变AI大神!
本地部署AI模型(如DeepSeek R1)保障数据隐私、节省成本且易于控制,通过Ollama平台便捷安装与运行,结合可视化工具(如Chatbox)及Python代码调用,实现高效、个性化的AI应用开发与使用。
1312 3
免费+数据安全!手把手教你在PC跑DeepSeek-R1大模型,小白也能秒变AI大神!
|
存储 设计模式 测试技术
了解三层架构:表示层、业务逻辑层、数据访问层
了解三层架构:表示层、业务逻辑层、数据访问层
9030 0
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
5014 11
|
开发工具 Docker 容器
Docker 镜像加速器配置指南
dockerhub加速器失败,使用第三方加速器