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

相关推荐
悟天特斯几秒前
AI驱动的楼宇节能:从“经验省电“到“算法能效“的进化之路
人工智能·物联网
Liuchang09111 分钟前
洛谷 P2670 [NOIP 2015 普及组] 扫雷游戏
c++·算法·游戏
破无差2 分钟前
人工智能训练师(三级)理论知识复习题-KimiK3的参考答案
人工智能
网络毒刘5 分钟前
AtomGit Actions + AI 评审草稿:PR 描述自动生成与安全敏感词门禁示例
人工智能·安全
ai_xiaogui5 分钟前
PanelAI 1.1.1重磅更新:秒级安装脚本优化 + 无公网IP算力节点组网,私有化AI管理平台全面升级
人工智能·网络协议·tcp/ip·api聚合管理·开发者ai一键部署·ai底层架构解析·ai应用快速变现
坤坤子吖8 分钟前
Python基础语法学习:函数
开发语言·笔记·python·学习
wflynn9 分钟前
语言判别增强多语言语音模型的语言学习能力
人工智能·ai
neocheng_5229 分钟前
自学、培训、项目还是认证?HR 学习 AI 的四种路径如何组合
人工智能
2501_9336707913 分钟前
2027风控策略岗秋招准备:SQL、Excel、建模的优先级与项目路径
人工智能·sql·excel
言乐613 分钟前
Python体现逻辑回归和决策树的区别
开发语言·python·算法·决策树·逻辑回归