第三章栈和队列

STL
栈:stack http://blog.csdn.net/weixin_37289816/article/details/54773495
队列:
queue  http://blog.csdn.net/weixin_37289816/article/details/54773581
priority_queue  http://blog.csdn.net/weixin_37289816/article/details/54773592
dequeue  http://blog.csdn.net/weixin_37289816/article/details/54729516

从数据结构角度看,栈和队列也是线性表。

栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表。

3.1 栈 stack

限定仅在表尾进行插入和删除操作的线性表。

表尾端 --> 栈顶 top

表头端 --> 栈底 bottom

后进先出 LIFO  last in first out

插入元素 --> 入栈

删除元素 --> 出栈

顺序栈

非空栈中的栈顶指针始终在栈顶元素的下一个位置。

3.2 栈的应用举例

3.2.1 数制转换

3.2.2 括号匹配检验

可用“期待的紧迫程度”这个概念来描述。

在算法中设置一个栈;

1、每读入一个括号,若是右括号,则或者使置于栈顶的最急迫的期待得以消解,或者是不合法的情况;

2、若是左括号,则作为一个新的更急迫的期待压入栈中,自然使原有的在栈中的所有未消解的期待的紧迫性都降了一级;

算法开始和结束时,栈都应该是空的。

3.2.3 行编辑程序

遇#退栈

遇@清栈

遇换行输出栈

3.2.4 迷宫求解

栈中所存信息为,坐标+步数+搜寻方向

墙-1

可走0

当前判断的位置与栈顶元素有关

3.2.5 表达式求值

表达式求值算法:

使用两个工作栈:1、运算符栈,2、操作数栈。

基本思想:

1、首先置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素;

2、依次读入表达式的每个字符,若是操作数则进操作数栈,若是运算符,则和运算符栈的栈顶运算符比较优先权后作相应操作,直至整个表达式求值完毕。栈顶高则计算,栈顶低则压栈。

符号 + - * / ( )

栈顶

+  >  + - )

-  >  + - )

*  >  * / + - )

/  >  * / + - )

(  < all  = )

3.3 栈与递归的实现

栈:函数调用

调用函数和被调用函数之间的链接及信息交换需通过栈来进行

递归函数

函数中有直接或间接调用自身函数的语句

条件:1、降阶;2、有出口。

编译软件开辟的栈空间是有限的,当递归调用时,嵌套的层次往往很多,可能发生栈溢出的现象。

3.4 队列

队列 queue:先进先出(First In First Out,FIFO)的线性表。

在表的一端进行插入,而在另一端删除元素。

队尾 rear:允许插入的一端

队头 front:允许删除的一端

典型例子:操作系统中的作业排队

双端队列:限定插入和删除操作在表的两端进行的线性表。

两端插入,一端删除;

两端删除,一端插入;

从插入端删除(栈底相连的栈)。

顺序队列(循环队列):

初始化建空队列时,令front=rear=0

插入队尾,尾指针增1

删除队头,头指针增1

在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾的下一个位置

循环队列:

1、另设一个标志位以区别队列是空还是满;

2、少用一个元素空间,约定以“队列头指针在队列尾指针的下一位置”作为队列呈满的标志。

头尾指针对存储空间MAX_QSIZE求余,形成循环队列。

如果用户的应用程序中设有循环队列,则必须为它设定一个最大队列长度;

若用户无法预估所用队列的最大长度,则采用链队列。

数据结构03栈和队列相关推荐

  1. 【数据结构】栈、队列、堆的python实现

    [数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...

  2. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  3. 数据结构~07.栈和队列的基本概念

    数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...

  4. 10.数据结构:栈和队列

    大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...

  5. 【数据结构】栈与队列区分push pop offer poll containsKey put等

    目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...

  6. 算法与数据结构(part5)--栈与队列

    学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...

  7. 用Java描述数据结构之栈和队列,以及栈和队列的常用方法

    一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然.它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具 ...

  8. 数据结构 3-0 栈与队列总结

    总结 栈和队列都可以看作对输入输出做限制的线性表.其中栈是限制了输入和输出只能在一端进行的线性表,可以将其看作向箱子里面摞书,想要取出最下面的书必须要先拿出上面的书,对应栈先进后出的特点.而队列正如其 ...

  9. JAVA day16、17 数据结构(栈、队列、数组、链表、红黑树)

    一.什么叫数据结构? 数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带"结构"的数据元素的集合."结构"就是指数据元素之间存在的关系,分为逻辑结构 ...

最新文章

  1. 《几何与代数导引》习题1.35.4
  2. runtime模型与字典互转
  3. Linux RPM 常用命令
  4. JS实现select去除option的使用注意事项
  5. h5的横线_CSS文字两边添加横线的几种方法
  6. pandas concat_pandas-数据合并-concat(最全参数解释,含代码和实例)
  7. 富文本框让最大四百像素_富文本框的使用
  8. requestmapping注解作用_Java高级架构师-Spring 注解编程之注解属性别名与覆盖
  9. Ubuntu下如何安装Dynamips
  10. Win软件 - Listary
  11. java中改变文本字体和大小_修改eclipse 代码字体大小以及文档字体大小
  12. mac chrome 重启电脑 插件消失
  13. 成员函数指针与高性能的C 委托
  14. 【思维导图】万科王石自传《我的改变:个人的现代化四十年》做的一些摘录
  15. React 解决 “cross-cutting concerns” 问题
  16. 浅析中国汽车融资租赁行业
  17. 10个有趣且易上手的AI项目(附Python源代码)
  18. 学习unity2d的计划安排
  19. 中国超级计算机神威 上市公司,中国拟研发百亿亿级超级计算机 秒杀目前最快神威...
  20. i5 9400f参数 i5 9400f性能怎么样

热门文章

  1. MySQL索引底层原理理解以及常见问题总结
  2. Java LocalDate类| ofYearDay()方法与示例
  3. 分析酸对酸性染料染羊毛染色性能的影响?举例说明酸性染料染羊毛时,如何选择合适的染浴pH值?并说明原因。
  4. 回文数、括号匹配(栈操作)
  5. 杭电2013-蟠桃记(C++)
  6. Java——递归练习
  7. int 转interger java_Java中Integer和int之间的转换
  8. fcntl函数之文件锁 F_SETLK
  9. Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式
  10. mysql学习笔记14 多表查询初步