Skip to content

三、栈和队列

本章导览

共 5 个小节:栈、队列、栈的应用、队列的应用、特殊矩阵 & 压缩存储

三、栈和队列 · 章节总览

本章重点

  • LIFO(一端进出)、队列 FIFO(一端进一端出)
  • 循环队列用取模复用空间
  • 栈→括号匹配/表达式/递归;队列→层次遍历/调度

栈

关键点

  • 仅栈顶进出,LIFO;顺序栈(数组+top)、链栈(无容量限制),均 O(1)
  • 易错:判空 top==-1、判满 top==n-1

顺序栈

顺序栈

链栈

链栈

关键点

头插法建立单链表对应进栈操作。 单链表的删除操作对应出栈操作。

队列

队列

关键点

  • FIFO,front 出、rear 入
  • 顺序队列用循环队列避免假溢出
  • 牺牲一个单元判断:(rear+1)%n==front 满、rear==front 空

顺序队列

顺序队列

关键点

其他出题方式:注意尾指针指向的是下一个插入位置还是队尾元素位置。 如果只想队尾元素位置,插入时如下图所示,需要先位移指针再插入,初始化时可以把尾指针放在头指针的前一格。

链表队列

链表队列

双端队列

双端队列

栈的应用

栈的应用

关键点

  • 栈的 LIFO 适合嵌套 / 回溯类问题
  • 括号匹配(左入右弹)、表达式求值(中缀转后缀)、递归(系统调用栈)

括号匹配

括号匹配

表达式求值

表达式求值

递归

递归

队列的应用

队列的应用

关键点

  • 队列 FIFO 适合按顺序 / 讲公平
  • 树的层次遍历(BFS 雏形)、操作系统调度(就绪队列 FCFS、缓冲区)

树的层次遍历

树的层次遍历

操作系统中的应用

操作系统中的应用

关键点

多个进程争抢着使用有限的系统资源时,FCFS(先来先服务)是一种常用策略。 Eg:打印数据缓冲区。

特殊矩阵 & 压缩存储

特殊矩阵 & 压缩存储

关键点

  • 相同 / 零元素只存一份
  • 对称、三角矩阵用一维映射公式;稀疏矩阵用**三元组 (行,列,值)**或十字链表
  • 易错:映射下标推导(行/列优先、起始 0 还是 1)