数据结构03栈和队列
第三章栈和队列
从数据结构角度看,栈和队列也是线性表。
栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表。
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栈和队列相关推荐
- 【数据结构】栈、队列、堆的python实现
[数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...
- C语言【数据结构】栈和队列【OJ题(C++)、选择题】
目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...
- 数据结构~07.栈和队列的基本概念
数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...
- 10.数据结构:栈和队列
大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...
- 【数据结构】栈与队列区分push pop offer poll containsKey put等
目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...
- 算法与数据结构(part5)--栈与队列
学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...
- 用Java描述数据结构之栈和队列,以及栈和队列的常用方法
一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然.它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具 ...
- 数据结构 3-0 栈与队列总结
总结 栈和队列都可以看作对输入输出做限制的线性表.其中栈是限制了输入和输出只能在一端进行的线性表,可以将其看作向箱子里面摞书,想要取出最下面的书必须要先拿出上面的书,对应栈先进后出的特点.而队列正如其 ...
- JAVA day16、17 数据结构(栈、队列、数组、链表、红黑树)
一.什么叫数据结构? 数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带"结构"的数据元素的集合."结构"就是指数据元素之间存在的关系,分为逻辑结构 ...
最新文章
- 《几何与代数导引》习题1.35.4
- runtime模型与字典互转
- Linux RPM 常用命令
- JS实现select去除option的使用注意事项
- h5的横线_CSS文字两边添加横线的几种方法
- pandas concat_pandas-数据合并-concat(最全参数解释,含代码和实例)
- 富文本框让最大四百像素_富文本框的使用
- requestmapping注解作用_Java高级架构师-Spring 注解编程之注解属性别名与覆盖
- Ubuntu下如何安装Dynamips
- Win软件 - Listary
- java中改变文本字体和大小_修改eclipse 代码字体大小以及文档字体大小
- mac chrome 重启电脑 插件消失
- 成员函数指针与高性能的C 委托
- 【思维导图】万科王石自传《我的改变:个人的现代化四十年》做的一些摘录
- React 解决 “cross-cutting concerns” 问题
- 浅析中国汽车融资租赁行业
- 10个有趣且易上手的AI项目(附Python源代码)
- 学习unity2d的计划安排
- 中国超级计算机神威 上市公司,中国拟研发百亿亿级超级计算机 秒杀目前最快神威...
- i5 9400f参数 i5 9400f性能怎么样
热门文章
- MySQL索引底层原理理解以及常见问题总结
- Java LocalDate类| ofYearDay()方法与示例
- 分析酸对酸性染料染羊毛染色性能的影响?举例说明酸性染料染羊毛时,如何选择合适的染浴pH值?并说明原因。
- 回文数、括号匹配(栈操作)
- 杭电2013-蟠桃记(C++)
- Java——递归练习
- int 转interger java_Java中Integer和int之间的转换
- fcntl函数之文件锁 F_SETLK
- Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式
- mysql学习笔记14 多表查询初步