数据结构03栈和队列

第三章栈和队列

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求余,形成循环队列。

 

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java动态编译执行

在某些情况下&#xff0c;我们需要动态生成java代码&#xff0c;通过动态编译&#xff0c;然后执行代码。JAVA API提供了相应的工具&#xff08;JavaCompiler&#xff09;来实现动态编译。下面我们通过一个简单的例子介绍&#xff0c;如何通过JavaCompiler实现java代码动态编译…

树莓派pwm驱动好盈电调及伺服电机

本文讲述如何通过树莓派的硬件PWM控制好盈电调来驱动RC车子的前进后退&#xff0c;以及如何驱动伺服电机来控制车子转向。 1. 好盈电调简介 车子上的电调型号为&#xff1a;WP-10BLS-A-RTR&#xff0c;在好盈官网并没有搜到对应手册&#xff0c;但找到一份通用RC竞速车的电调使…

数据结构04串

第四章 串 STL&#xff1a;string http://blog.csdn.net/weixin_37289816/article/details/54716009计算机上非数值处理的对象基本上是字符串数据。 在不同类型的应用中&#xff0c;字符串具有不同的特点&#xff0c;要有效的实现字符串的处理&#xff0c;必须选用合适的存储…

CAS单点登录原理解析

CAS单点登录原理解析 SSO英文全称Single Sign On&#xff0c;单点登录。SSO是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。CAS是一种基于http协议的B/S应用系统单点登录实现方案&#xff0c;认识CAS之前首先要熟悉http协议、Session与Co…

JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。

JDK1.6版添加了新的ScriptEngine类&#xff0c;允许用户直接执行js代码。在Java中直接调用js代码 不能调用浏览器中定义的js函数&#xff0c;会抛出异常提示ReferenceError: “alert” is not defined。[java] view plaincopypackage com.sinaapp.manjushri; import javax.sc…

数据结构05数组和广义表

第五章 数组 和 广义表 数组和广义表可以看成是线性表在下述含义上的扩展&#xff1a;表中的数据元素本身也是一个数据结构。 5.1 数组的定义 n维数组中每个元素都受着n个关系的约束&#xff0c;每个元素都有一个直接后继元素。 可以把二维数组看成是这样一个定长线性表&…

k8s的ingress使用

ingress 可以配置一个入口来提供k8s上service从外部来访问的url、负载平衡流量、终止SSL和提供基于名称的虚拟主机。 配置ingress的yaml&#xff1a; 要求域名解析无误 要求service对应的pod正常 一、test1.domain.com --> service1:8080 apiVersion: extensions/v1beta1…

JDK1.8中如何用ScriptEngine动态执行JS

JDK1.8中如何用ScriptEngine动态执行JS jdk1.6开始就提供了动态脚本语言诸如JavaScript动态的支持。这无疑是一个很好的功能&#xff0c;毕竟Java的语法不是适合成为动态语言。而JDK通过执行JavaScript脚本可以弥补这一不足。这也符合“Java虚拟机不仅仅是Java一种语言的虚拟机…

数据结构06树和二叉树

第六章 树和二叉树 6.1 树的定义和基本术语 树 Tree 是n个结点的有限集。 任意一棵非空树中&#xff1a; &#xff08;1&#xff09;有且仅有一个特定的称为根&#xff08;root&#xff09;的结点&#xff1b; &#xff08;2&#xff09;当n>1时&#xff0c;其余结点可…

2019.03.20 mvt,Django分页

MVT模式 MVT各部分的功能: M全拼为Model&#xff0c;与MVC中的M功能相同&#xff0c;负责和数据库交互&#xff0c;进行数据处理。 V全拼为View&#xff0c;与MVC中的C功能相同&#xff0c;接收请求&#xff0c;进行业务处理&#xff0c;返回响应。 T全拼为Tem…

CountDownLatch,CyclicBarrier和Semaphore

在java 1.5中&#xff0c;提供了一些非常有用的辅助类来帮助我们进行并发编程&#xff0c;比如CountDownLatch&#xff0c;CyclicBarrier和Semaphore&#xff0c;今天我们就来学习一下这三个辅助类的用法。以下是本文目录大纲&#xff1a;一.CountDownLatch用法二.CyclicBarrie…

数据结构07排序

第十章内部排序 10.1 概述 排序就是把一组数据按关键字的大小有规律地排列。经过排序的数据更易于查找。 排序前KiKj&#xff0c;且Ki在前: 排序方法是稳定的&#xff0c;若排序后Ki在前&#xff1b; 排序方法是不稳定的&#xff0c;如排序后Kj在前。 分类&#xff1a; 内…

数据结构08查找

第九章 查找 另一种在实际应用中大量使用的数据结构--查找表。 所谓查找&#xff0c;即为在一个含有众多的数据元素的查找表中找出某个“特定的”数据元素。 查找表 search table 是由同一类型的数据元素构成的集合。集合中的数据元素之间存在着完全松散的关系&#xff0c;故…

下载Centos7 64位镜像

下载Centos7 64位镜像 1.打开Centos官网 打开Centos官方网站地址&#xff1a;https://www.centos.org/&#xff0c;点击Get CentOS Now 2.点击Minimal ISO镜像 Minimal ISO镜像&#xff0c;与DVD ISO镜像的差别有很多&#xff0c;这里只说两点 1.Minimal ISO类似于Windows的纯净…

[Objective-C语言教程]结构体(17)

Objective-C数组可定义包含多个相同类型的数据项的变量类型&#xff0c;但结构体是Objective-C编程中的另一个用户定义数据类型&#xff0c;它可组合不同类型的数据项。 结构体用于表示记录&#xff0c;假设要图书馆中跟踪书籍信息。可能希望跟踪每本书的以下属性 - 标题作者学…

Scala01入门

第1章 可伸展的语言 Scala应用范围广&#xff0c;从编写脚本&#xff0c;到建立大型系统。 运行在标准Java平台上&#xff0c;与Java库无缝交互。 更能发挥力量的地方&#xff1a;建立大型系统或可重用控件的架构。 将面向对象和函数式编程加入到静态类型语言。 在Scala中&a…

架构师之路17年精选80篇

【架构必备】 《互联网架构如何实现“高并发”》4W 《TCP接入层的负载均衡、高可用、扩展性架构设计》2.2W 《配置中心架构设计演进》1.7W 《跨公网调用的大坑与架构优化》1.4W 《DNS在架构设计中的巧用》1.9W 《消息如何在网络上安全传输》1.2W 《10W定时任务&#xff0c;如何…

iphone手机型号获取

#import <sys/utsname.h> //手机型号 NSString *device [self iphoneType]; (NSString *)iphoneType { struct utsname systemInfo; uname(&systemInfo); NSString *platform [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; if…

Java网络01基本网络概念

协议 Protocol&#xff1a;明确规则 &#xff08;1&#xff09;地址格式&#xff1b; &#xff08;2&#xff09;数据如何分包&#xff1b; ... TCP/IP四层模型&#xff1a; 应用层 HTTP SMTP POP IMAP 传输层 TCP UDP 网际层 IP 主机网络层 host to host layer 数模、…

apache的产品分类说明

分类 项目名 说明 开发语言 服务器&#xff08;共20&#xff09; Apache HTTP Server全球第一HTTP服务器C/CTomcatJava的Web服务器JavaJames邮件服务器JavaSpamAssassin反垃圾邮件C/CPerlApache的Perl编程语言支持C/CTclTCL脚本语言C/CDirectory Server超级目录服务器JavaAxisW…