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

数据结构:栈与队列的应用及矩阵压缩存储

介绍数据结构中栈与队列的典型应用。栈可用于括号匹配、表达式求值(含中缀转前后缀及计算)、递归过程模拟;队列适用于树的层次遍历与图的广度优先搜索。此外涵盖了一维二维数组存储结构,以及对称、三角、带状、稀疏等矩阵的压缩存储原理。

CloudNative发布于 2026/3/22更新于 2026/8/2350 浏览
数据结构:栈与队列的应用及矩阵压缩存储

栈

1. 括号匹配问题

1.1 概述

在代码编写中,若括号不匹配编译器会报错。最后出现的左括号最先被匹配(最里层被外层包裹),符合后进先出(LIFO)性质,可用栈解决。

1.2 算法演示

遵循规则:

  • 左括号入栈。若遍历结束栈非空,则缺少右括号。
  • 右括号出现时,检查栈顶是否为匹配的左括号。若不匹配或栈空,则错误。
1.3 算法实现

遍历字符串,根据字符类型执行入栈或出栈操作,最终判断栈是否为空且无匹配错误。

1.4 小结

利用栈的 LIFO 特性可有效检测括号是否成对出现。

2. 表达式求值问题

2.1 引言

操作数为数字,运算符为 +、-、*、/。数学家提出不用括号的表示法,即前缀表达式(波兰表达式)和后缀表达式(逆波兰表达式)。

2.2 简述
  • 中缀:运算符在两个操作数中间。
  • 后缀:运算符在两个操作数后面。
  • 前缀:运算符在两个操作数前面。
2.3 中缀转后缀(手算)

使用'左优先原则'保证运算顺序唯一。观察运算符优先级和结合性进行转换。

2.4 后缀表达式的计算
2.4.1 手算

遇到操作数入栈,遇到运算符弹出两个操作数计算后将结果压栈,重复直至得到最终结果。

2.4.2 机算
表达式:AB+CD*E/-F+
步骤 | 栈内容(从底到顶)
---|---
1.A|[A]
2.B|[A,B]
3.+|[A+B]
4.C|[A+B,C]
5.D|[A+B,C,D]
6.*|[A+B,C*D]
7.E|[A+B,C*D,E]
8./|[A+B,(C*D)/E]
9.-|[(A+B)-((C*D)/E)]
10.F|[(A+B)-((C*D)/E),F]
11.+|[((A+B)-((C*D)/E))+F]
2.5 中缀转前缀(手算)

转为前缀表达式采用'右优先原则',逻辑与后缀相反。

2.6 前缀表达式的计算

从右向左扫描,操作数入栈,遇运算符弹栈计算。示例如下:

步骤元素栈(从底到顶)说明
11[1]入栈
21[1,1]入栈
3+[2]1+1=2
............
2.7 小结

后缀和前缀表达式消除了括号依赖,便于计算机处理。

3. 表达式求值问题(续)

3.1 中转后(手算)

包含括号的中缀表达式转后缀时,需处理括号优先级。

3.2 中转后(机算)

正常无括号形式与加括号形式处理逻辑一致,括号作为界限符控制入栈时机。

3.3 小结

通过双栈法或单栈法可实现中缀转后缀并计算。

4. 栈在递归中的应用

4.1 函数调用背后的过程

A 调用 B,B 调用 C,C 结束返回 B,B 结束返回 A。最后调用的函数最先结束,符合后进先出特性。

4.2 递归

递归即函数自己调用自己。

4.2.1 阶乘

递归调用时参数 n 依次减小至 1,返回时依次相乘。

4.2.2 斐波那契数列

典型递归案例,需注意效率优化。

4.3 小结

系统栈自动管理递归调用过程。

队列

1. 树的层次遍历

先进先出(FIFO):

  • 先访问根节点(第 1 层)。
  • 再访问子节点(第 2 层)。
  • 依此类推。

2. 图的广度优先遍历

先进先出(FIFO):

  • 先访问起点。
  • 再访问邻居节点。
  • 然后访问下一层邻居。

3. 在操作系统中的应用

用于进程调度等场景。

矩阵的压缩存储

涉及线性代数知识。

1. 数组的存储结构

1.1 一维数组的存储结构

连续内存空间存储。

1.2 二维数组的存储结构

分为行优先和列优先两种映射方式。

2. 矩阵的存储结构

2.1 普通矩阵

按常规方式存储。

2.2 对称矩阵

上下三角区数据重复,只存一个三角区以节约空间。

2.3 三角矩阵

上三角或下三角区为同一元素,可省略空间。

2.4 带状矩阵

非零元素集中在对角线附近,其余为 0,可省略大量空间。

2.5 稀疏矩阵

有效数据少,按位置排列存储,节约空间。

2.6 小结

针对特殊矩阵采用压缩存储可显著降低空间复杂度。

目录

  1. 栈
  2. 1. 括号匹配问题
  3. 1.1 概述
  4. 1.2 算法演示
  5. 1.3 算法实现
  6. 1.4 小结
  7. 2. 表达式求值问题
  8. 2.1 引言
  9. 2.2 简述
  10. 2.3 中缀转后缀(手算)
  11. 2.4 后缀表达式的计算
  12. 2.4.1 手算
  13. 2.4.2 机算
  14. 2.5 中缀转前缀(手算)
  15. 2.6 前缀表达式的计算
  16. 2.7 小结
  17. 3. 表达式求值问题(续)
  18. 3.1 中转后(手算)
  19. 3.2 中转后(机算)
  20. 3.3 小结
  21. 4. 栈在递归中的应用
  22. 4.1 函数调用背后的过程
  23. 4.2 递归
  24. 4.2.1 阶乘
  25. 4.2.2 斐波那契数列
  26. 4.3 小结
  27. 队列
  28. 1. 树的层次遍历
  29. 2. 图的广度优先遍历
  30. 3. 在操作系统中的应用
  31. 矩阵的压缩存储
  32. 1. 数组的存储结构
  33. 1.1 一维数组的存储结构
  34. 1.2 二维数组的存储结构
  35. 2. 矩阵的存储结构
  36. 2.1 普通矩阵
  37. 2.2 对称矩阵
  38. 2.3 三角矩阵
  39. 2.4 带状矩阵
  40. 2.5 稀疏矩阵
  41. 2.6 小结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 2026 年 AI 辅助编程工具对比:Copilot、Cursor、Claude Code 与 Codex
  • 从零构建天气提醒机器人:Claude Code 如何重塑开发工作流
  • Ollama Windows 安装与使用指南:本地运行 Llama、DeepSeek 大模型
  • Elasticsearch 核心概念与 Java 客户端实战指南
  • AI Agent 选型指南:16 款主流框架深度对比
  • NISP 国家信息安全水平考试详解与职业价值
  • Python 利用 Turtle 模块绘制爱心树
  • MCP 协议详解:与 Function Call 的区别及 Python 实现
  • 本地部署 n8n 与私有 AI 模型实战指南
  • 大模型在大数据平台的应用场景与开发落地实践
  • 基于DeepSeek与Cursor构建智能代码审查工具实战
  • Qwen2.5-7B-Instruct 大模型 vLLM 推理加速与前端调用
  • 2024 版 Kali Linux 虚拟机安装教程(详细步骤)
  • VSCode 自定义 Copilot Agent 及使用 Awesome Agent 模板
  • LightRAG 框架介绍与 WebUI 本地部署应用
  • Ubuntu 18.04 在 VMware 中的安装教程
  • 基于文本引导的图像生成技术与 Stable Diffusion 实践
  • 基于 LangChain 与 ChatGLM2 的本地知识库搭建实践
  • StructBERT-Large 实战教程:单句对多句批量检索模式扩展开发指南
  • 基于改进 YOLOv11n 的无人机红外目标检测算法

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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