跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言算法

数据结构:栈、队列、二叉树与哈希表

四种基础数据结构:栈(先进后出)、队列(先进先出)、二叉树(层级结构)和哈希表(键值映射)。详细阐述了各结构的定义、核心操作、实现方式及应用场景。例如栈用于函数调用和撤销操作,队列用于任务调度,二叉树用于搜索和排序,哈希表用于快速查找。掌握这些结构是理解算法的基础。

漫步发布于 2026/3/30更新于 2026/7/2050 浏览

栈

栈的基本概念

栈是一种线性数据结构,遵循先进后出,后进先出(LIFO)原则。最后插入的元素最先被移除。栈的操作通常限制在栈顶进行,包括压栈(push)和弹栈(pop)。

栈的核心操作

压栈(Push) 将元素添加到栈顶。若栈已满(固定容量栈),则称为栈溢出(Stack Overflow)。

弹栈(Pop) 移除并返回栈顶元素。若栈为空,则称为栈下溢(Stack Underflow)。

查看栈顶(Peek/Top) 返回栈顶元素但不移除它。

判空(isEmpty) 检查栈是否为空。

栈的实现方式

数组实现 使用数组存储元素,维护一个栈顶指针(或索引)。压栈时指针递增,弹栈时指针递减。 优点:实现简单,访问速度快。 缺点:容量固定,可能需动态扩容。

链表实现 使用链表的头部作为栈顶,压栈和弹栈均在头部操作。 优点:动态扩容,无固定大小限制。 缺点:额外内存存储指针,操作略慢于数组。

栈的应用场景

函数调用栈 程序执行时,函数调用和返回通过栈管理。每次调用压栈,返回时弹栈。

表达式求值 中缀表达式转后缀表达式或直接求值时,用栈处理运算符优先级。

括号匹配 检查括号是否成对且嵌套正确。遇到左括号压栈,右括号弹栈匹配。

撤销操作(Undo) 文本编辑器中,每次操作压栈,撤销时弹栈恢复状态。

队列

队列的基本概念

队列是一种先进先出(FIFO, First In First Out)的线性数据结构,类似于现实生活中的排队场景。元素从队列的尾部(rear)加入,从队列的头部(front)移除。

队列的操作

  • 入队(Enqueue):在队列尾部添加元素。
  • 出队(Dequeue):从队列头部移除元素并返回。
  • 查看队头(Peek/Front):获取队头元素但不移除。
  • 判空(IsEmpty):检查队列是否为空。
  • 获取队列大小(Size):返回队列中元素的数量。

队列的实现方式

队列可以通过数组或链表实现:

基于数组的实现 使用固定大小的数组时,可能遇到'假溢出'问题(即数组未满但无法插入),需通过循环队列优化。

基于链表的实现 动态分配节点,无需担心容量限制,但需要额外的指针开销。

队列的应用场景

  • 任务调度:如 CPU 任务队列、打印任务队列。
  • 广度优先搜索(BFS):遍历树或图时使用队列管理待访问节点。
  • 缓冲区管理:数据流处理中的缓冲机制。

二叉树

二叉树的基本概念

二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。节点之间的连接称为边,没有子节点的节点称为叶子节点。

二叉树的特点

  • 有序性:子节点分为左、右,顺序不可随意调换。
  • 递归结构:每个子树本身也是一棵二叉树。
  • 常见类型:包括满二叉树、完全二叉树、二叉搜索树(BST)、平衡二叉树(如 AVL 树)等。

二叉树的遍历方式

  • 深度优先遍历(DFS):前序遍历(根→左→右)、中序遍历(左→根→右)、后序遍历(左→右→根)。
  • 广度优先遍历(BFS):按层级从上到下、从左到右访问节点。

应用场景

  • 二叉搜索树用于高效查找、插入和删除(平均时间复杂度 O(log n))。
  • 堆(一种完全二叉树)用于优先队列和排序算法(如堆排序)。
  • 哈夫曼树用于数据压缩编码。

存储方式

  • 链式存储:通过节点对象存储值和左右子节点的引用。
  • 顺序存储:用数组表示,通过下标计算父子节点位置(适用于完全二叉树)。

哈希表

哈希表的基本概念

哈希表是一种通过哈希函数将键(Key)映射到存储位置(值 Value)的数据结构。它支持高效的数据插入、删除和查找操作,平均时间复杂度为 O(1)。

核心组成

  • 哈希函数:将键转换为数组索引,理想情况下应均匀分布以减少冲突。
  • 冲突处理:常见方法包括链地址法(链表存储冲突键)和开放寻址法(探测空闲位置)。

特点

  • 高效性:平均情况下操作时间为常数级。
  • 空间权衡:需预留足够空间以减少冲突,可能浪费部分内存。
  • 无序性:不保证键的顺序(某些实现如 LinkedHashMap 除外)。

应用场景

  • 快速查找(如字典、缓存)。
  • 去重(如统计唯一元素)。
  • 数据库索引优化。

注意事项

  • 哈希函数设计不当会导致性能退化至 O(n)。
  • 动态扩容(Rehashing)可能影响实时性。

目录

  1. 栈
  2. 栈的基本概念
  3. 栈的核心操作
  4. 栈的实现方式
  5. 栈的应用场景
  6. 队列
  7. 队列的基本概念
  8. 队列的操作
  9. 队列的实现方式
  10. 队列的应用场景
  11. 二叉树
  12. 二叉树的基本概念
  13. 二叉树的特点
  14. 二叉树的遍历方式
  15. 应用场景
  16. 存储方式
  17. 哈希表
  18. 哈希表的基本概念
  19. 核心组成
  20. 特点
  21. 应用场景
  22. 注意事项
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 二叉树层序遍历:BFS 算法可视化与实现
  • Python 国内常用镜像下载网址及配置方法
  • 基于 ASP.NET Core 和 Python 的 PDF 转 Word 工具开发与部署实践
  • 前端 rem 自适应适配方案详解:解决 UI 走样与横屏问题
  • Spring @Transactional 事务未回滚?检查 MySQL 存储引擎配置
  • Java 环境配置与第一个程序运行指南
  • 智能体(Agent)核心概念、组成与应用详解
  • Python 中的 == 与 is:本质区别与最佳实践
  • AIRI:基于 AI 大模型构建桌宠虚拟伴侣
  • FAIR plus 机器人全产业链接会:聚焦具身智能与产业链协同
  • Claude Code 进阶指南:使用 Everything 插件打造有记忆的 AI 程序员
  • 滑动窗口算法专题:四道经典题目深度解析
  • 借助 AI 高效生成测试用例的实操指南
  • C3P0 反序列化漏洞深度解析:Hex 字节码加载与防御策略
  • WSL2 启动报错 0x8007054f 及网络配置问题解决方案
  • Linux 系统下安装配置 Nginx 图文教程
  • Obsidian 集成 AI 插件实现笔记自动化与可视化生成
  • 基于飞算 JavaAI 的在线图书借阅平台设计与实现
  • 阿里开源 Page-Agent:一行 JS 代码实现大模型前端 DOM 控制
  • Nano Banana进行AI绘画中文总是糊?一招可重新渲染,清晰到可直接汇报

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online