数据结构--栈的插入、删除、查找详解

1 栈和队列

1.1 栈和队列的定义和特点
  • 栈:后进先出 队列:先进先出
1.1.1 栈的应用
1.1.2 队列的应用
1.2 栈的定义和特点
1.2.1 栈的相关概念
1.2.1 栈和线性表的区别
1.3 队列的定义和特点
1.4 栈和队列的相关案例
1.4.1 案例一:进制转换 (栈)

例题:

1.4.2 案例二:括号匹配的检验 (栈)

算法思路:

1.4.3 案例三:表达式求值 (栈)

算法思路:

1.4.4 舞伴问题
1.5 栈的表示和操作的实现
1.5.1 栈的抽象数据类型的类型定义
1.5.2 顺序栈的表示和实现
1.5.3 顺序栈的数据类型定义
1.5.4 顺序栈的初始化

注意:

  1. new SElemTypeMAXSIZE 做了什么?
  • new 是C++里的动态内存分配关键字(C语言用 malloc )

  • SElemType 是栈里存的元素类型(比如 int 、 char ,你可以理解成"要存的东西的类型")

  • MAXSIZE 是栈的最大容量(比如100,代表最多存100个元素)

这句话的本质:向系统申请一块连续的、大小为 MAXSIZE 个 SElemType 元素的内存空间,并且返回这块空间的起始地址。

  1. 为什么要把这个地址赋值给 S.base ?

S.base 是栈底指针,它需要指向栈的起始位置。

  • 我们刚用 new 申请了一块连续内存,这块内存就是我们的「栈」

  • 把这块内存的起始地址赋值给 S.base ,就相当于让 S.base 指向了栈的最底部(0号位置)

  • 从此 S.base 就锚定了栈的起点,再也不会变了

  • if (!S.base)

    不是在判断栈空不空,

    是在判断:栈这个"容器"本身有没有被造出来!

1.5.5 顺序栈判断栈是否为空
1.5.6 求顺序栈的长度
1.5.7 清空顺序栈
1.5.8 销毁顺序栈
1.5.9 顺序栈的入栈

注意:

在C/C++中:

  • 如果 if 条件后面没有写大括号 {} ,那么 if 只会控制紧接在它后面的那1条语句

  • 这条语句执行完(或者不执行), if 的控制就结束了,后面的代码不受if影响,一定会执行

1.5.10 顺序栈的出栈
1.5.11 链栈的表示和实现
1.5.12 链栈的初始化
1.5.13 判断链栈是否为空
1.5.14 链栈的入栈
1.5.15 链栈的出栈
1.5.16 取栈顶元素
1.6 栈与递归
1.6.1 递归的定义
  • 递归定义的数学函数
  • 具有递归特性的数据结构
  • 可递归求解的问题
1.6.2 分治法
1.6.3 函数调用过程

例题:

1.6.4 递归的优缺点
  • 方法1:
  • 方法2:
1.6.5 借助栈改写递归的方法
相关推荐
tachibana22 小时前
与其他语言相比,使用 Go 有什么好处?
开发语言·后端·golang·go
Logic1012 小时前
C语言/数据结构字符串题解:按字符类型重排(数字→字母→符号)——三趟扫描稳定分区
c语言·数据结构·字符串·时间复杂度·计数排序·算法题·ascii
阿俊-全栈开发6 小时前
LikeShop 单商户SaaS商城分销模块二开:佣金计算与结算逻辑实现
java·开发语言·微服务·likeshop·likeshop开源商城·likeshop多商户
思陌Ai算法定制8 小时前
医疗AI系统架构:多癌早筛血液检测从cfDNA甲基化测序到CSO预测,特异性99.6%
经验分享
GEO从入门到精通8 小时前
课程怎么选?2026年GEO学习资源全梳理
学习
weixin_424183618 小时前
开放—封闭原则实战(下):基于策略的流程编排与编译期多态
c++·分布式·系统架构
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
ychqsq9 小时前
201.春风
经验分享·职场和发展
wuminyu9 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
优化Henry9 小时前
LTE 载波频率与频点配置详解
运维·网络·学习·5g·信息与通信