Skip to content

3.1 栈

3.1.1 栈的基本概念

Pasted image 20251108164901.png

Pasted image 20251108164945.png

基本操作

Pasted image 20251108165142.png

常考题型

判断出栈顺序是否合法

3.1.2 顺序栈

使用静态数组来实现的栈

初始化

Pasted image 20251108165443.png

push

Pasted image 20251108165548.png

pop

Pasted image 20251108165721.png

获取第一个元素的值

Pasted image 20251108165833.png

共享栈

Pasted image 20251108170018.png

3.1.3 链栈

与单链表一样的操作

3.2 队列

3.2.1 队列的定义

Pasted image 20251108171112.png

基本操作

Pasted image 20251108171158.png

3.2.2 队列的顺序实现

初始化

Pasted image 20251108171402.pngPasted image 20251108171444.png

入队

Pasted image 20251108171629.png

这种方式实现的队列为循环队列: Pasted image 20251108171751.pngPasted image 20251108171955.png

判空、满

(rear-front+maxsize)%maxsize,也可以使用一个值来存储队列的长度

3.2.3 队列的链式实现

受限的单链表

初始化

Pasted image 20251108172915.png

不带头 Pasted image 20251108172938.png

插入

Pasted image 20251108173046.png

不带头 Pasted image 20251108173144.png

出队

Pasted image 20251108173254.png

3.2.4 双端对列

Pasted image 20251108173710.png

3.3 栈的应用

3.3.1 括号匹配问题

Pasted image 20251108175444.png

3.3.2 运算表达式求值

Pasted image 20251108180616.png 中缀表达式的运算顺序可能是不唯一的 ,转化的后准表达式的顺序也可能是不唯一的 Pasted image 20251108180916.png 最好是“左优先”,尽可能的将左侧的运算符优先生效,进而确保算法的确定性。

Pasted image 20251108181424.png

Pasted image 20251108181711.png

Pasted image 20251108182037.png

算法实现

Pasted image 20251108182656.png

计算中缀表达式: Pasted image 20251108183552.png

3.3.3 递归调用

Pasted image 20251108184823.pngPasted image 20251108185019.png

3.3.4 队列应用

树的层次遍历、图的广度优先遍历

3.4 特殊矩阵压缩存储

3.4.1 二维数组

行优先: Pasted image 20251109152920.png

列优先: Pasted image 20251109153000.png

Pasted image 20251109153141.png

3.4.2 对称矩阵

Pasted image 20251109153339.pngPasted image 20251109154023.png 将在上三角区的aij转换为aji就可以实现访问上三角区的元素。

3.4.3 三角矩阵

Pasted image 20251109154347.png

可以将常量c存于数组末尾: Pasted image 20251109155634.png

3.4.4 三对角矩阵

Pasted image 20251109155111.pngPasted image 20251109155515.png

3.4.5 稀疏矩阵

Pasted image 20251109160124.pngPasted image 20251109160431.png