8种常见数据结构及其特点简介

一、8种常见数据结构

1. 数组(Array)

  • 简介:数组是有序元素的序列,连续内存块存储相同类型元素,通过下标直接访问。数组会为存储的元素都分配一个下标(索引),此下标是一个自增连续的,数组下标从0开始访问,
  • 核心特点
    • 查询速度快;随机访问时间复杂度为 O(1)
    • 增删速度慢;插入/删除元素需移动后续元素,时间复杂度 O(n)
    • 大小固定(静态数组)或可扩展(动态数组)。
  • 典型操作:增、删、改、查。
  • 应用场景:基础数据批量存储、矩阵运算、缓存实现。

 


2. 链表(Linked List)

  • 简介:链表是由一系列节点Node(也可称元素)组成,数据元素的逻辑顺序是通过链表的指针地址实现,通常情况下,每个节点包含两个部分,一个用于存储元素的数据,名叫数据域,另一个则指向下一个相邻节点地址的指针,名叫指针域。节点通过指针连接,根据节点指针指向,分为单向链表、双向链表和循环链表
  • 核心特点
    • 增删速度块;动态分配内存,插入/删除时间复杂度 (O(1))(已知节点位置时)。
    • 查询速度慢;随机访问效率低(需从头遍历,时间复杂度 (O(n)))。
  • 典型操作:头插、尾插、节点删除、反转链表。
  • 应用场景:实现栈、队列、LRU缓存、哈希表冲突处理。

 

 单向链表新增、删除元素演示:


3. 栈(Stack)

  • 简介后进先出(LIFO)的线性结构,仅允许在栈顶操作。
  • 核心特点
    • 插入(push)和删除(pop)时间复杂度均为 O(1)
    • 空间复杂度 O(n),需避免栈溢出。
  • 典型操作:压栈、弹栈、获取栈顶元素。
  • 应用场景:函数调用栈、表达式求值、括号匹配、回溯算法。


4. 队列(Queue)

  • 简介先进先出(FIFO)的线性结构,操作在队尾(入队)和队头(出队)。
  • 核心特点
    • 普通队列插入/删除时间复杂度 O(1)
    • 支持变体:双端队列(Deque)、优先队列(Priority Queue)
  • 典型操作:入队、出队、判空、获取队头元素。
  • 应用场景:任务调度、BFS算法、消息队列、滑动窗口。


5. 树(Tree)

  • 简介分层数据结构,常见类型包括二叉树、平衡树、B/B+树等。
  • 核心特点
    • 二叉树:每个节点最多两个子节点
    • 平衡树(如AVL、红黑树):通过旋转保持高度平衡,保证查询效率 O(logn)。
  • 典型操作:插入、删除、查找、遍历(前/中/后序)。
  • 应用场景:数据库索引(B+树)、文件系统、决策树算法。


6. 图(Graph)

  • 简介由顶点(Vertex)和边(Edge)构成,分为有向图与无向图
    • 有向图:边不仅连接两个顶点,并且具有方向;
    • 无向图:边仅仅连接两个顶点,没有其他含义;
  • 核心特点
    • 邻接矩阵存储(空间 (O(n^2)))或邻接表存储(空间 (O(n+e)))。
    • 支持权重图、稀疏图、稠密图等变体。
  • 典型操作:遍历(DFS/BFS)、最短路径(Dijkstra)、最小生成树(Prim/Kruskal)。
  • 应用场景:社交网络、路径规划、推荐系统、依赖分析。


7. 哈希表(Hash Table)也称为散列表

  • 简介:基于键值对(Key-Value)存储,通过哈希函数映射位置。散列表其实是数组的一种扩展,由数组演化而来。
  • 核心特点
    • 理想情况下查询/插入/删除时间复杂度 O(1)。
    • 需处理哈希冲突(链地址法、开放寻址法)。
  • 典型操作:插入、删除、查找、扩容(Rehashing)。
  • 应用场景:字典、缓存(Redis)、唯一性检查、分布式一致性哈希。


8. 堆(Heap)

  • 简介:堆可以看做是一棵用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。
    • 分为大顶堆(父节点值 ≥ 子节点)和小顶堆
  • 核心特点
    • 堆化(Heapify)时间复杂度 O(n)。
    • 插入/删除堆顶元素时间复杂度 O(logn)。
  • 典型操作:插入元素(上浮)、删除堆顶(下沉)、构建堆。
  • 应用场景:优先队列、Top K问题、堆排序、定时任务调度。


总结对比

数据结构

插入/删除时间复杂度

查询时间复杂度

典型用途

数组

O(n)

O(1)

快速随机访问

链表

O(1)

O(n)

动态数据操作

栈/队列

O(1)

O(1)

受限顺序操作

哈希表

O(1)

O(1)

高效键值存储

O(logn)

O(1)

极值优先处理


选择建议:根据场景需求选择数据结构:

  • 需要快速查询 → 数组、哈希表。
  • 高频插入/删除 → 链表、树、堆。
  • 分层关系 → 树、图。
  • 顺序约束 → 栈、队列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过mailto:实现web/html邮件模板唤起新建邮件并填写内容

一、背景 在实现网站、html邮件模板过程中,难免会遇到需要通过邮箱向服务提供方发起技术支持等需求,因此,我们需要通过一个功能,能新建邮件并提供模板,提高沟通效率 二、mailto协议配置说明 参数描述mailto:nameema…

好用但不常用的Git配置

参考文章 文章目录 tag标签分支新仓库默认分支推送 代码合并冲突处理默认diff算法 tag标签 默认是以字母顺序排序,这会导致一些问题,比如0.5.101排在0.5.1000之后。为了解决这个问题,我们可以把默认排序改为数值排序 git config --global t…

第六十八篇 从“超市收银系统崩溃”看JVM性能监控与故障定位实战

目录 引言:当技术问题遇上生活场景一、JVM的“超市货架管理哲学”二、收银员工具箱:JVM监控三板斧三、典型故障诊断实录四、防患于未然的运维智慧五、结语:从故障救火到体系化防控 引言:当技术问题遇上生活场景 想象一个周末的傍…

tauri2项目打开某个文件夹,类似于mac系统中的 open ./

在 Tauri 2 项目中打开文件夹 在 Tauri 2 项目中,你可以使用以下几种方法来打开文件夹,类似于 macOS 中的 open ./ 命令功能: 方法一:使用 shell 命令 use tauri::Manager;#[tauri::command] async fn open_folder(path: Strin…

编译pg_duckdb步骤

1. 要求cmake的版本要高于3.17,可以通过下载最新的cmake的程序,然后设置.bash_profile的PATH环境变量,将最新的cmake的bin目录放到PATH环境变量的最前面 2. g的版本要支持c17标准,否则会报 error ‘invoke_result in namespace ‘…

GO 语言中变量的声明

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。Go 语言中关键字和保留字都不能用作变量名。Go 语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。 并且 Go 语言的变量声明后必须使用。 1. var 声明变量 在 Go 语言中&…

windows和mac安装虚拟机-详细教程

简介 虚拟机:Virtual Machine,虚拟化技术的一种,通过软件模拟的、具有完整硬件功能的、运行在一个完全隔离的环境中的计算机。 在学习linux系统的时候,需要安装虚拟机,在虚拟机上来运行操作系统,因为我使…

XCTF-web-Cat

尝试输入127.0.0.1 尝试127.0.0.1;ls 试了很多,都错误,尝试在url里直接输入,最后发现输入%8f报错 发现了Django和DEBUG 根据Django的目录,我们使用进行文件传递 尝试?url/opt/api/database.sqlite3,找到了flag

C#、C++、Java、Python 选择哪个好

选择哪种语言取决于具体需求:若关注性能和底层控制选C、若开发企业级应用选Java、若偏好快速开发和丰富生态选Python、若构建Windows生态应用选C#。 以Python为例,它因语法简洁、开发效率高、应用广泛而在AI、数据分析、Web开发等领域大放异彩。根据TIOB…

CEH Practical 实战考试真题与答案

什么是 CEH Practical? CEH Practical 是 EC-Council 推出的 Certified Ethical Hacker(CEH)认证项目中的一项高级动手实践考试。它不同于传统的理论考试,侧重于在真实环境中检验考生的实操能力。 CEH Practical 主要亮点 &…

自媒体运营新利器:账号矩阵+指纹浏览器,解锁流量密码

你是否因多账号关联被平台封禁?或在多设备间切换账号效率低下?账号矩阵与指纹浏览器的结合,正是解决这些难题的利器! 一、核心优势:安全、高效、精准、协同 1**. 保障账号安全** 指纹浏览器模拟设备指纹与兔子住宅…

将 AI 解答转换为 Word 文档

相关说明 DeepSeek 风靡全球的2025年,估计好多人都已经试过了,对于理科老师而言,有一个使用痛点,就是如何将 AI 输出的 mathjax 格式的符号转化为我们经常使用的 mathtype 格式的,以下举例说明。 温馨提示&#xff1…

Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(三):实现暗黑模式主题切换

基于前两篇的内容,为页面添加主题切换功能,实现网站页面的暗黑模式: Tailwind css实战,基于Kooboo构建AI对话框页面(一)-CSDN博客 Tailwind css实战,基于Kooboo构建AI对话框页面(…

主题阅读输出-关于成年/成熟的认识-01-学习

快速回顾 学习的最终目的,成年人的学习特点,学习对象的选取(学什么),学习过程的理解,对学习状态的觉察; 参考来源 书籍 《心发怒放的人生》 《我的第一本人生规划手册》 《五维学习力》 《学习的答案》 01-学习是什…

GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【一】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

Python+Flask+Html做一个简单的测试联调工具

一、场景: 当与外部联调或者内部需要走一些固定流程,且重复的事情,往往需要测试经常性的配合且做重复的工作的联调,这时候需要一些工具作为辅助,或者提供给外部 二、框架: 可以通过PythonFlaskHtml做一个…

Qt5、C++11 获取wifi列表与wifi连接

一、获取wifi列表 .h 文件内容 #include <QWidget> #include <QVBoxLayout> #include <QPushButton> #include <QCheckBox> #include <QListWidget>class Setting : public QWidget {Q_OBJECT public:explicit Setting(QWidget *parent nul…

互联网大厂Java求职面试:AI与大模型应用集成中的架构难题与解决方案-1

互联网大厂Java求职面试&#xff1a;AI与大模型应用集成中的架构难题与解决方案-1 场景描述 郑薪苦&#xff0c;一个看似不靠谱但技术潜力巨大的程序员&#xff0c;在一次针对AI与大模型应用集成的面试中&#xff0c;被一位技术总监级别的人物提问。面试官以严肃专业的态度&a…

SpringMVC实战:动态时钟

引言 在现代 Web 开发中&#xff0c;选择一个合适的框架对于项目的成功至关重要。Spring MVC 作为 Spring 框架的核心模块之一&#xff0c;以其清晰的架构、强大的功能和高度的可配置性&#xff0c;成为了 Java Web 开发领域的主流选择。本文将通过一个“动态时钟”的实战项目…

知行之桥如何将消息推送到钉钉群?

在钉钉平台中&#xff0c;机器人主要分为企业机器人和自定义机器人两类。本文将重点介绍如何通过自定义机器人&#xff0c;实现将知行之桥 EDI 系统的通知消息高效推送至钉钉群&#xff0c;帮助企业第一时间掌握业务动态。 一、在钉钉群中添加自定义机器人 在需要接收知行之桥…