拉钩公瑾数据结构和算法课程笔记
栈是什么
栈是一种特殊的线性表。栈的数据结点必须后进先出。

栈既然是线性表,那么它也包含了表头和表尾。不过在栈结构中,由于其操作的特殊性,会对表头和表尾的名字进行改造。表尾用来输入数据,通常也叫作栈顶(top);相应地,表头就是栈底(bottom)。栈顶和栈底是用来表示这个栈的两个指针。跟线性表一样,栈也有顺序表示和链式表示,分别称作顺序栈和链栈。

  1. 栈的基本操作
  • 顺序栈

  • 链栈
  1. 栈的案例
  • 例 1,给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须与相同类型的右括号匹配,左括号必须以正确的顺序匹配。例如,{ [ ( ) ( ) ] } 是合法的,而 { ( [ ) ] } 是非法的。

  • 例 2,浏览器的页面访问都包含了后退和前进功能,利用栈如何实现?

为了支持前进、后退的功能,利用栈来记录用户历史访问网页的顺序信息是一个不错的选择。此时需要维护两个栈,分别用来支持后退和前进。


3. 总结
好的,这节课的内容就到这里了。这一节的内容主要围绕栈的原理、栈对于数据的增删查操作展开。

栈继承了线性表的优点与不足,是个限制版的线性表。限制的功能是,只允许数据从栈顶进出,这也就是栈后进先出的性质。不管是顺序栈还是链式栈,它们对于数据的新增操作和删除操作的时间复杂度都是 O(1)。而在查找操作中,栈和线性表一样只能通过全局遍历的方式进行,也就是需要 O(n) 的时间复杂度。

栈具有后进先出的特性,当你面对的问题需要高频使用新增、删除操作,且新增和删除操作的数据执行顺序具备后来居上的相反关系时,栈就是个不错的选择。例如,浏览器的前进和后退,括号匹配等问题。栈在代码的编写中有着很广泛的应用,例如,大多数程序运行环境都有的子程序的调用,函数的递归调用等。这些问题都具有后进先出的特性。关于递归,我们会在后续的课程单独进行分析。

限制后的线性表--栈相关推荐

  1. c语言用两个栈构造队列伪码,数据结构习题线性表栈队列.doc

    数据结构习题线性表栈队列 线性表(58) 1. 在单链表.双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 2.设线性表的 ...

  2. 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

  3. step3 . day4 数据结构之线性表 栈和队

    补充一下:循环链表初学可能不好理解,除了多画图以外,把循环链表想象成无限的单向(或者双向)链表,每一个元素都是中间元素,就更好理解了. 1.栈和队是线性表的两种特殊管理逻辑,两者都是线性表 2.栈的原 ...

  4. 线性表------栈

    1.基本概念 栈:只允许在一端插入或删除操作的线性表 栈底(buttom):固定的,不允许进行插入和删除操作的另一端 栈顶(top):线性表允许插入和删除的一段 栈是线性表,只不过受到限制了,只允许在 ...

  5. 1、顺序存储:线性表/栈/队列:理论+C语言实现--详细

    文章目录 Data_Structure 绪论 1.逻辑结构 1.集合结构 2. 线性结构 3.树形结构 4.图形结构 2.物理结构 1.顺序存储结构 2.链式存储结构 1 线性表的顺序存储 1.1 线 ...

  6. 2021-9-下旬 数据结构-线性表- 栈 -java代码实现(复习用)

    import java.util.ArrayList; import java.util.List; //栈的本质就是线性表,因为总在线性表的表尾端进行操作(出栈入栈),其重要特性为FILO先进后出 ...

  7. 七、数据结构:线性表-栈(后进先出)

    1.栈是一种先进后出的顺序表,和顺序表的区别是:顺序表可以操作任意元素,但是栈只能对栈顶元素进行操作,即后进先出原则. 2.栈的操作就只有入栈和出栈两个. 3.实现入栈和出栈 栈的栈顶用top标识,入 ...

  8. step3 . day5 数据结构之线性表 栈和队的应用-球钟问题

    球钟问题: 球钟是一个利用球的移动来记录时间的简单装置.它有三个可以容纳若干个球的指示器:分钟指示器,五分钟指示器,小时指示器.若分钟指示器中有2个球,5分钟指示器中有6个球,小时指示器中有5个球,则 ...

  9. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

  10. b+树时间复杂度_数据结构:线性表,栈,队列,数组,字符串,树和二叉树,哈希表...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

最新文章

  1. android sudio jni 调用so_UE4:UPL 与 JNI 调用的最佳实践
  2. HTTP/2 规格制定完成
  3. 爬取三千条数据需要多久_存储-性能,IOPS,带宽,吞吐量,1TB数据需要多久写完...
  4. CC1101超低功耗无线模块在物联网能门锁中的应用
  5. 21天早起计划,奖你1000+元!
  6. 2021年宁夏省高考成绩查询入口,2021年宁夏高考成绩查询通知【附官网查询入口】...
  7. Linux进程调度原理【转】
  8. error: possibly undefined macro: LT_SYS_SYMBOL_USCORE please use m4_pattern_allow
  9. 遥感解译结果(多要素)用Arcgis做拓扑检查
  10. C++ QT中国象棋双人单机对战代码总结
  11. 2018-7-4 笔记
  12. archive 归档解归档
  13. git版本回退命令_git 版本回退 撤销 删除
  14. 科软计算机录取人数,科软是如何用5年时间从招生靠调剂到406名400+大神的?
  15. STM32开发实战:W25Q32JV SPI Flash详解
  16. 数学分析教程(科大)——4.1笔记+习题
  17. Gait Part论文阅读笔记
  18. WPS编辑分段函数公式技巧,怎么对齐分段条件
  19. 2017-滴滴出行-安全岗笔试
  20. IPv6地址配置方式,无状态地址配置及DHCPv6配置

热门文章

  1. Libevent源码分析-----日志和错误处理
  2. A - 棋盘问题 POJ - 1321(深搜)
  3. pptv图标出现在计算机磁盘,PPTV出现界面乱码如何解决
  4. 结构体、文件操作、指针
  5. php larval开发规范,Laravel 开发规范摘要
  6. 时序轮转的意思_《九州仙魔志》-烛龙:凡人的昼夜轮转,都在它眼睛开合之间...
  7. python需要学数据结构吗_我也要学python-内置数据结构(一)
  8. 页面刷新_刷新vue页面,解决数据丢失
  9. 富文本++php+源码,轻量级富文本编辑器wangEditor
  10. 称重管理系统使用说明_车辆智能称重管理系统车牌识别