34_数据结构_栈

一、栈的基本概念

1. 栈的定义

(1) 栈的逻辑结构

a. 线性表的特例
i. 只允许在一端插入和删除
⓵ 栈顶与栈底

2. 栈的特点

(1) 后进先出

a. LIFO 结构

i. 最后进入的元素最先被访问

二、栈的数学表示

1. 栈的状态表示

(1) 栈的序列形式

KaTeX parse error: Expected 'EOF', got '&' at position 4: &̲emsp; &ems...

其中 s1s_1s1 为栈底,sns_nsn 为栈顶

2. 栈的基本操作

(1) 入栈

KaTeX parse error: Expected 'EOF', got '&' at position 4: &̲emsp; &ems...

(2) 出栈

KaTeX parse error: Expected 'EOF', got '&' at position 4: &̲emsp; &ems...

三、栈的存储结构

1. 顺序栈

(1) 基于数组实现

a. 栈顶指针 top

i. top = -1 表示空栈

(2) 代码结构

/*

* Allman 风格

*/

KaTeX parse error: Expected 'EOF', got '&' at position 4: &̲emsp; &ems...

2. 链式栈

(1) 基于链表实现

a. 栈顶为链表头结点

i. 入栈为头插法

⓵ 出栈为删除头结点

四、栈的时间复杂度分析

1. 基本操作

(1) 入栈

a. 顺序栈(未满):O(1)O(1)O(1)

b. 链式栈:O(1)O(1)O(1)

(2) 出栈

a. 顺序栈(非空):O(1)O(1)O(1)

b. 链式栈:O(1)O(1)O(1)

2. 栈的扩容

(1) 动态顺序栈

a. 均摊分析

i. 均摊时间复杂度为 O(1)O(1)O(1)

五、栈的应用场景

1. 函数调用栈

(1) 递归函数的实现

a. 每次调用压入栈帧

i. 返回时弹出栈帧

2. 表达式求值

(1) 中缀转后缀

a. 运算符优先级比较

i. 使用栈临时存储运算符

(2) 后缀表达式求值

a. 遇到操作数入栈

b. 遇到运算符弹出两个操作数

3. 括号匹配

(1) 算法流程

a. 左括号入栈

b. 右括号与栈顶匹配

i. 匹配成功则弹出,否则报错

六、栈的常见问题与扩展

1. 共享栈

(1) 两个栈共享一个数组

a. 栈底分别在数组两端

i. 栈顶向中间移动

2. 栈的溢出与下溢

(1) 上溢

a. 顺序栈满时继续入栈

(2) 下溢

a. 空栈时进行出栈操作

3. 栈与队列的对比

(1) 栈:LIFO

(2) 队列:FIFO

相关推荐
摇滚侠5 分钟前
Java 零基础全套视频教程,面向对象(高级),笔记 105-120
java·开发语言·笔记
CN-Dust13 分钟前
【C++专题】输出cout例题
开发语言·c++
时空系14 分钟前
第6篇:多维数据盒——管理大量数据 python中文编程
开发语言·python·ai编程
bryant_meng15 分钟前
【Hung-yi Lee】《Introduction to Generative Artificial Intelligence》(11)
人工智能·深度学习·llm·speculative·预言家
OriginHub_元枢智汇16 分钟前
知识图谱的检索增强:图结构与向量化技术的融合实践
人工智能·知识图谱
charlie11451419117 分钟前
嵌入式Linux驱动开发(7) 从虚拟设备到真实硬件 —— LED驱动硬件基础
linux·开发语言·驱动开发·内核·c
人工智能AI技术17 分钟前
Python 有序字典与普通字典基础区别
人工智能
胡耀超18 分钟前
从逻辑思维到方法论(DMBOK2)并以知识图谱实践指导:构建企业级思维与执行框架
大数据·人工智能·dama·知识图谱·方法论·逻辑学·思维框架
小敬爱吃饭22 分钟前
知识图谱实战第一章:知识图谱全景解析其定义、技术演进与十大应用场景
人工智能·python·目标检测·自然语言处理·flask·nlp·知识图谱
Jump 不二22 分钟前
揭秘腾讯 Ima 知识库架构:从开源 WeKnora 看 RAG + 知识图谱落地实践
人工智能·语言模型·架构·机器人·开源·知识图谱