文章目录

  • 栈和队列
    • a 栈的接口与实现
      • a1 栈
      • a2 实例
      • a3 实现
    • c
      • c1-1 栈的典型应用
      • c1-2 进制转换算法
      • c1-3实现
      • c2-1括号匹配实例
      • c2-2 尝试
      • c2-3 构思
      • c2-4 实现
      • c2-5 反思
      • c2-6 扩展
      • c3-1 栈混洗
      • c3-2 计数
      • c3-3 甄别
      • c3-4 算法
      • c3-5 括号
      • c4-1 中缀表达式
      • c4-2 构思
      • c4-3 实例
      • c4-4 算法框架
      • c4-5 算法细节
      • c4-6 实例
      • c5-1 逆波兰表达式简化
      • c5-2 体验
      • c5-3 手工
      • c5-4 RPN转换算法
    • d 队列
      • d1 队列接口
      • d2 实例
      • d3 实现

栈和队列

day17

a 栈的接口与实现

a1 栈

a2 实例

LIFO:后进先出

a3 实现

上图为基于向量模拟实现栈,其中入栈、出栈操作都是在向量末尾完成,复杂度是O(1),如果在向量首部实现入栈、出栈的话,复杂度就会变成O(n)

c

c1-1 栈的典型应用

栈的典型应用场合

c1-2 进制转换算法

计算过程自上而下,输出结果,自下而上,可以应用栈存储输出结果

c1-3实现

c2-1括号匹配实例

c2-2 尝试

c2-3 构思

c2-4 实现

c2-5 反思

只有一种括号时,使用计数器也可以实现

c2-6 扩展

c3-1 栈混洗

栈混洗后结果如下

c3-2 计数

catalan数:https://www.cnblogs.com/Morning-Glory/p/11747744.html

c3-3 甄别

c3-4 算法

编程练习:利用堆栈完成栈混洗模拟实现的编程(√)

c3-5 括号

push换成左括号,pop对应于一个右括号,发现同一元素对应的push/pop操作恰好对应于一对匹配的括号。反过来由n对括号构成的任何一个合法的表达式,也可以解释为对n个元素进行栈混洗的一个合法的过程。总结来说,n个元素的合法的栈混洗有多少种,n对括号的合法的表达式就有多少种,二者一 一对应。

c4-1 中缀表达式

这些计算是如何实现的?

c4-2 构思

优先计算优先级高的运算符
延迟缓冲:线性扫描,找到优先级高的先计算,优先级不定的先缓冲起来,接着向下扫描。

c4-3 实例

c4-4 算法框架

c4-5 算法细节

上图解释了程序代码中case ‘=’,即运算符优先级相等时,代码编写的思路。上图中定义了左括号与右括号的优先级相等,当遍历出现右括号时,此时栈顶一定是与之对应的左括号,且二者包含的计算式在之前已经被计算出来了,所以直接将左括号出栈,跳过右括号继续向下遍历即可。
对于\0,其作用也相当于一对括号。

c4-6 实例

其他运算符乐于接收左括号,左括号也乐于接收其他运算符
\0,右括号乐于促成栈顶运算执行

c5-1 逆波兰表达式简化

逆波兰表达式不使用括号表达优先级,而是将运算的优先级体现为运算符在表达式中出现的次序,谁先出现,谁先计算。

c5-2 体验


将中缀表达式转换为RPN,只需要一个堆栈,即可完成运算

c5-3 手工

转换之后,操作数的顺序不会改变

c5-4 RPN转换算法

d 队列

d1 队列接口

enqueue;dequeue

d2 实例

d3 实现

开始第五章

邓俊辉数据结构与算法学习笔记-第四章相关推荐

  1. 邓俊辉数据结构与算法学习笔记-第十一章

    文章目录 11.串 11.a ADT 11.b 串匹配 11.b1 串匹配 11.b2 蛮力匹配 11.c KMP算法 11.c1 KMP算法:从记忆力到预知力 11.c2 KMP算法查表 11.c3 ...

  2. 邓俊辉 数据结构与算法C++版 第十三章 串 ADT

    邓公数据结构与算法 第十三章 串 ADT 定义和特点 术语 ADT接口实现 模式匹配 问题与需求 算法测试方法 蛮力匹配 构思 蛮力匹配:版本1 蛮力匹配:版本2 蛮力匹配:性能分析 KMP算法 ne ...

  3. 清华大学邓俊辉-数据结构MOOC笔记-树的概念及逻辑表示

    清华大学邓俊辉-数据结构MOOC笔记-树的概念及逻辑表示 有关概念: 与图论略有不同,数据结构中的树:1.需要为每一颗树指定一个特殊的顶点,作为"根"(root),对应rooted ...

  4. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  5. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  6. 数据结构与算法学习笔记——链栈

    数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...

  7. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  8. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  9. 数据结构与算法 学习笔记(5):字符串

    数据结构与算法 学习笔记(5)- 字符串 本次笔记记录了LeetCode中关于字符串的一些问题,并给出了相应的思路说明和代码.题目编号与LeetCode对应,方便查找. 题目1:LeetCode 13 ...

最新文章

  1. R语言Welch方差分析(Welch’s ANOVA)实战:Welch方差分析是典型的单因素方差分析的一种替代方法,当方差相等的假设被违反时我们无法使用单因素方差分析,这时候Welch’s出来救场了
  2. C#高级编程----错误和异常的总结
  3. 基于cuda的mmp的bug调试
  4. JSP教程第5讲笔记
  5. JavaWEB开发国际化
  6. Spring Cloud Sleuth 之Greenwich版本全攻略
  7. 超好玩的msn自制动画头像
  8. Excel怎么制作二维码图片?
  9. 锐捷服务器虚拟化技术_网络设备-锐捷-交换机(S8607E)VSU虚拟化终结配置篇
  10. 不同机构的自动驾驶专利分析报告解读
  11. [4G5G专题-41]:物理层-物理随机接入信道PRACH与随机接入过程
  12. 大数据工程师和数据分析师有何区别
  13. html为什么链接无效,如何揪出网页中的无效链接
  14. 插入排序:直接插入、交换插入、折半插入
  15. 从懵懂走向成熟,证明属于自己的征程
  16. 第五届金鹏奖圆满落幕 2015年度原创游戏榜单出炉
  17. 新浪博客大赛:你刷我也刷?
  18. 佟大为新任《非诚》嘉宾 极力反对异地恋
  19. STC系列芯片的串口通信编程
  20. 选一些200页左右的书,每周看一本

热门文章

  1. docker部署jpress详细版本
  2. Cesium.js解析第一篇 Cartesian3
  3. mysql leader/followers_half-sync/half-async 和 Leader/Followers 模式的主要区别
  4. DALAO们好我是新手
  5. 884.两句话中的不常见单词
  6. Unity摄像头仿真调研(svl)
  7. Maya cmds pymel 单位和轴向设置
  8. matlab中对于xf(x)的积分,[matlab 积分]MATLAB求积分?
  9. ltib常用命令详解
  10. windows环境下C++实现的多种目录监控和优劣解析