栈 - 关于出栈序列,判断合法的出栈序列

出栈顺序问题讲解 蓝桥杯 引言:最近刷数据结构的题,刷到一组元素入栈,他的出栈顺序有可能是哪些时卡住,之前没有关注此类问题,便写下总结 先通过几个例题讲解下出栈顺序问题 1. 一个栈的入栈序列是a,b,c,d,e则栈的不可能的输出序列是:() A edcba B decba C dceab D abcde 栈之根本——后进先出(Last In Firs... 阅读详情

1 引例

(例)设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( )。
A. 1 2 4 3
B. 2 1 3 4
C. 1 4 3 2
D. 4 3 1 2
E. 3 2 1 4

一般人看到此类题目,都会拿起草稿纸,将各个选项都模拟一遍选出正确答案
这当然可以得出正确的答案 (D )
但当元素个数过多的时候,这个方法不可取,而且,这种人工模拟过程浪费时间且容易出错,下面将介绍一种简单的做题方法。

2 做题方法

按顺序入栈的序列,任意元素 e ,比 e 先入栈的元素,并且比 e 后出栈的元素,一定是逆序的。

读起来有点绕口,那么先记下 “ 后出先入逆序 ”

1、以最上面的例题为例,若要写出所有以 1 2 3 4 为入栈顺序的出栈序列
暴力求解:4个元素一共有 A 4 4 A_4^4 A44​ 共24种排列(下表加粗斜体的排列为合法排列)

123412431324134214231432
213421432314234124132431
312431423214324134123421
412341324213423143124321

表格中加粗斜体的排列为合法排列一共有 14 个
现在可以随意选一个序列来理解一下什么是 “ 后出先入逆序 ”
比如序列:3 1 2 4

  1. 选择任意元素 e ,这里选择 3
  2. 比 3 后出栈的有三个元素 1 2 4
  3. 其中比 3 先入栈的有两个元素 1 2
  4. 但是 1 2 是正序的,而不是逆序的
  5. 所以这个序列不是合法出栈序列

(注:可以利用递归设计出相应的算法来判断所有合法序列)

2、若只要求出一共有多少个合法出栈序列

在这里插入图片描述

将元素个数替换 n 计算即可,计算得 14
该公式称为卡塔兰数(Catalan number)公式,了解更多 点这里

注:上式中的括号上下两个数(2n和n)代表数学中排列组合公式中的C上下两个数,即用组合公式来求即可。

3 原因

3.1 选项D(4 3 1 2)的模拟

1、将 1 2 3 4 顺序依次入栈:
这里写图片描述
2、弹出栈顶元素 4:
这里写图片描述
3、弹出栈顶元素 3:
这里写图片描述

接下来栈内只剩下元素 1 和 2 ,并且 2 在栈顶
所以说 D (4 3 1 2) 选项的出栈顺序最后的 1 和 2 是无法完成的

可以发现:
如果把最后两个元素的顺序逆置一下,就可以完成了

合法的出栈序列 题目 已知从1至n的数字序列,按顺序入栈,每个数字如战后即可出栈,也可在栈中停留,等待后面的数字入栈出栈后,该数字再出栈,求该数字序列的出栈序列是否合法? 思路 用一个栈和一个队列实现。 栈存储放入的是数字1-n入栈的序列,队列存储的是要判断的序列。 当栈不为空且栈顶元素和队列的头元素相等时,那么栈弹出栈顶元素,队列弹出头元素。当不相等时,1-n的序列继续入栈。 最终,若栈为空,则说明序列正确,否则,就为错误。 代码 #include <iostream> #include <stack 阅读详情

相关推荐

判断出栈顺序合法性的两种方法

文章目录 今天偶然看到一个面试题, 题目是这样的: 给我们两个序列,第一个序列表示栈的压入顺序,然后让判断第二个序列是不是是否是该栈的弹出序列 现设第一个序列为[1,2,3,4,5],第二个序列为[3,2,5,4,1],可以看出这个出栈顺序是合法的,那么我们怎么通过程序来验证呢? 思路: 首先要根据栈的先进后出原则, 分析出来的 要比较的一定是题意中 辅助栈s 和 出栈数组stack_out的首个...

♡ 脚下的每一步都叫远方 ♡ 6538

如何判断出栈顺序是否正确?

一.若初始数列为123456789(升),则在出栈结果中,任选一个位置i,该位置右边所有小于位置i元素的,必须是降序排列。 eg:321987654             3后面小于3的元素1和2,为降序排列,9后面小于9的元素也是降序排列,合法! eg : 987651234              可快速判断出,9后面的元素1234并没有降序排列,故不合法! 二.同理可知,若初始

zwbHUST的博客 9206

已知入栈顺序,判断某一序列是否为其合法出栈序列!

代码: #include #include void Check(int a[],int b[],int n){ int * c; int i=0,j=0,k=0; c=(int *)malloc(sizeof(int)*n); while(i do{ c[k++]=a[i]; }while(a[i++]!=b[j]); for(int f=k-1;f>=0;f--){ i

梦想之深邃 1153

【栈队列】判断出栈顺序的合法性

问题描述元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。问题分析直观的思路就是将入栈序列一个一个入栈,与出栈序列相比较,一样就出栈,不一样就继续入栈,当入栈序列和出栈序列都为空时,表示出栈顺序合法。建立一个辅助栈 把输入的第一个序列中的数字一个一个压入该辅助栈,并

菜鸟成长记 1万+

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

图像质量评估:使用 SSIM 计算图像相似性

在图像处理领域,衡量两幅图像之间相似性的一种常见方法是使用结构相似性指数(SSIM)。SSIM 是一种全参考的图像质量评估指标,它不仅考虑了图像的亮度、对比度,还考虑了结构信息。在本文中,我们将介绍一个使用 Python 和 OpenCV 实现的 SSIM 计算脚本,并使用该脚本评估两幅图像的相似性。

hasque2019的博客 1153

判断是否是合法的出栈序列

判断是否是合法的出栈序列 栈,这个“后进先出(Last In First Out)” 数据结构应该都不陌生。如果 a、b、c 依次入栈,然后出栈,那么出栈顺序是 c、b、a;如果 a 入栈然后出栈、b 入栈出栈、c 入栈出栈,那么出栈顺序是 a、b、c。如果只是强调 a、b、c 的入栈顺序,而不强调具体的出栈顺序,那么 cba 和 abc 都可以是出栈顺序,acb、bac 和 bca 也都可以,

The_star_is_at的博客 1万+

Amos实战:如何用Bootstrap法检验中介效应?附完整操作步骤

本文详细介绍了如何使用Amos软件通过Bootstrap法检验中介效应,包括模型设定、参数配置和结果解读。Bootstrap方法因其不依赖正态分布假设、统计功效高等优势,成为中介效应分析的首选方法。文章提供了完整的操作步骤和实用建议,帮助研究者准确评估变量间的中介作用机制。

zz67890的博客 1438

判断一个栈的出栈序列的合法性

规则是: 出栈序列中的每个数后面的比它小的数,是按递减排列的。 简化规则描述: 1、假设入栈顺序为1234。 1)若出栈序列为4123,显然不满足上述要求,因为对于4,它后面比它小的数字序列为123,而123是一个递加系列即不是递减排列,所以不是合法出栈序列。 2)若出栈系列为3142,也不合法,因为3后面比它小的1和2不是递减排列的。 3)若出栈系列为1234,则合法,因为对于每一个数字它后...

如是说的博客 1万+

(南京观海微电子)——GH700X调试指南--SPI 接口+LVDS-测试盒使用方法

1表示OTP完成后,读取烧录值是否一致来判断是否烧录成功,2表示同时检测VCOM是否一致以及烧录次数是否增加,3表示不做任何检测,由用于自行在程序中判断。[格式]:SetFindVcomEn (<开启或关闭>),ON表示开启VCOM搜寻,默认是开启的,只要使能OTP烧录,按OTP按键则进行VCOM查询;[功能]:OTP完成检测类别,用于设置OTP完成后检测OTP次数还是OTP值来判断OTP是否成功。[功能]:用于设置VCOM查询使能,比如需要烧全代码而不需要对VCOM查询时,可以禁止VCOM查询。

m0_75095200的博客 1664

一套适合 ABAP 初级和中级开发人员,从入门到提高的 ABAP 学习教程

曾几何时,ABAP 就是 SAP 的代名词。ABAP 这门编程语言造就了 SAP 名噪一时的 R/3 产品,同时也是如今 SAP 旗舰级产品,SAP S/4HANA 底层的实现语言。 ABAP 不仅代表着 SAP 这家公司在企业级管理软件市场辉煌的过去,ABAP 自身也在不断地进化着。SAP 不仅在本地部署(On-Premise)领域继续保持着自己绝对的统治地位,而且在云应用领域(Software-as-a-Service, 简称 SaaS), 也推出了自己的解决方案,比如 SAP S/4HANA Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5916

3.5判断出栈和入栈操作序列是否合法

题目描述: 假设以I和O分别表示入栈和出栈操作,栈的初试状态和终态都是空,出栈和入栈序列仅有I和O组成。 称可以操作的序列为合法序列,否则为非法序列。 写一个算法判断一个给定的序列是否合法。若合法返回True,否则返回false. 题目分析: 一个由出栈操作和入栈操作组成的序列,要是合法序列应该满足: 1.入栈的操作次数大于等于出栈操作的次数; 2.当遇到每个出栈操作时,判断

千言万语ROOM 5068

把 ST03 的历史数据留得更久:ABAP Workload 统计保留期设置、原理与落地避坑指南

SAP ST03性能数据保留期配置指南 ST03/ST03N是SAP系统性能分析的核心工具,但默认数据保留期通常较短(3个月左右),难以满足跨季度对比、年度规划等需求。本文详细解析了ST03数据保留期的配置方法及注意事项: 数据存储机制:性能数据存储在监控库中,通过定期重组作业清理过期数据 配置路径:7.0+系统在"Workload Collector Database→Reorganization→Control"中按Profile分别设置 关键限制:保留期最大值建议不超过99,否则可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 217

给定入栈序列,判断出栈序列是否合法

题目:分别给定入栈序列和出栈序列,然后判断出栈序列是否合法。如入栈序列是[1,3,2,4,5],出栈序列[3,1,2,4,5]是合法的,[3,1,5,2,4]是不合法的。 思路: 判断出栈序列是否合法的标准是:栈顶如果是需要出栈的元素,则出栈,如果不是则将未入栈的元素按入栈序列依次入栈,直到栈顶为出栈的元素。如果所有元素都入栈了,仍然没有找到要弹出的元素,那么该出栈序列一定不是合法的。 参考

Doublelv 的博客专栏。 4509

高级数据结构之R树(R-tree)

R树(R-tree)是一种将B树扩展到多维情况下得到的数据结构,它最初由Antonin Guttman于1984年提出。B树的结点中会存储一个键的集合,这些键把线分成片段,沿着那条线的点仅属于一个片段。因此,B树使得我们可以很容易地找到点。如果把沿线各处的点表示成B树结点,我们就能够确定点所属唯一子结点,在那里可以找到该点。 Antonin Guttman在他提出R树的经典论文中给出的R树例子...

白马负金羁 1万+

车载以太网测试-3【Wireshark介绍】

数据包捕获支持从多种网络接口(如以太网、Wi-Fi、蓝牙等)捕获数据包。可以实时捕获或从文件中读取已捕获的数据包。协议解析支持解析数百种网络协议(如 TCP/IP、HTTP、DNS、FTP 等)。能够深入解析协议头部和负载,帮助用户理解网络通信的细节。过滤功能提供强大的显示过滤器和捕获过滤器,帮助用户快速定位和分析感兴趣的数据包。支持基于协议、IP地址、端口号等多种条件的过滤。统计和分析提供多种统计工具,如流量图、会话统计、协议分层统计等。

车载网络测试工程师的博客 1989

给出入栈序列判断出栈序列是否合法、求出栈序列的个数

1.判断出栈序列是否合法 模拟入栈过程,为了测试出栈序列是否正确,将元素按顺序入栈进行模拟。如果能够利用栈模拟出出栈次序,说明序列正确。 将序列存在队列中,将元素按顺序入栈,如果和队列首部元素相等,则弹出队列和栈,直到栈为空。 最后栈不为空的话,说明序列不合法。 举个例子 入栈:入栈序列ABCDEF 出栈序列FECDBA F出栈:入栈序列ABCDE 出栈序列ECDBA E出栈:入栈序列ABCD 出栈序列CDBA D!=C 所以不合法 2.n个元素进栈,共有多少种出栈顺序 https://blog.cs

乾坤未定,你我皆是黑马 1188

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

给出入栈序列,快速判断出栈序列是否合法

关于栈有一个很有用的性质,对于出栈序列的每一个元素,该元素后  比该元素先入栈的一定按照降序排列。若入栈的是一串数字例如12345,则21435是一个合法的出栈顺序,每一个元素i后比i小的都是降序排列(因为入栈的数字代表了进栈先后),24153不是合法的,因为对于4,比它小的1和3的顺序不对。

liufangbaishi2014的博客 8836

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【数据结构】给出入栈序列判断出栈序列的合法性

给定一个出栈序列,判断该序列是否合法 方法如下: 1.设置一个辅助栈来存储压入栈而尚未出栈的元素 2.假设压栈序列 {a,b, c, d, e }; 3.给定一个出栈序列{c,a, ,b d, e,}; 4.判断如下 通过cur遍历压栈序列,通过str遍历出栈序列 cur指a,str指c 判断cur和str的内容是否相等 如果不相等:就把cur所指的内容压入辅助栈 辅助栈:a】

Qregi的博客 2917

给定入栈序列判断给定出栈序列是否合法

题目:输入两个整数序列。其中一个序列表示栈的入栈顺序,判断另一个序列有没有可能是对应的出栈顺序。思路:用一个辅助栈,将入栈序列按照某种顺序入栈,看是否可以产生出栈序列即可。 1)如果当前栈为空,且入栈序列不空,则入栈序列的下一个元素入栈; 2)如果当前辅助栈的栈顶元素不等于出栈序列的首元素,那么入栈序列一直入栈,直到入栈序列为空。 3)如果当前辅助栈的栈顶元素等于出栈序列的首元素

拂晓的专栏 5376

栈----出栈序列合法判断(C++)

题目 给定一个从1开始的连续整数列1、2、3、4…n。 将上述数列按顺序入栈,中途栈顶元素可以出栈。 再给定一个出栈序列,判断此序列是否合法。 例如,将n设为4。即得到数列1、2、3、4。 再给定出栈序列1、3、4、2。 可以看出,此出栈序列合法。 过程如下,先将数列1、2、3、4中的元素1入栈,再将其出栈。 然后将元素2、3入栈,将元素3出栈。 最后将元素4入栈,再把栈内的仅余元素4、2出栈。 整个过程中,元素按照1、3、4、2的顺序出栈。证明其合法。 Input 输入包括多组测试用例。 对于每组测

二进制宇宙的博客 3650

3-2.4 出栈序列的合法性:判断一个序列是否可由入栈出栈得到

目录题目程序 题目 给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, …, N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5、N=7,则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 },但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。 输入格式: 输入第一行给出 3 个不超过 1000 的正整数:M(堆栈最大容量)、N(入...

wodabawang的博客 1358

输入入栈序列判断出栈序列是否合法(c语言实现)

题目: 分别给定入栈序列和出栈序列,然后判断出栈序列是否合法。如入栈序列是[6,5,4,3,2,1],出栈序列[4,5,3,1,2,6]是合法的,[3,4,6,5,2,1]是不合法的。 思路 判断出栈序列是否合法的标准是:栈顶如果是需要出栈的元素,则出栈,如果不是则将未入栈的元素按入栈序列依次入栈,直到栈顶为出栈的元素。如果所有元素都入栈了,仍然没有找到要弹出的元素,那么该出栈序列是不合法的。 创建一个临时数组存放入栈的元素,找到出栈序列第一个元素在入栈序列中的位置j,将j和j前面的元素加入临时数组

qq_52931080的博客 5265

C语言数据结构算法之求出栈序列个数、判断出栈序列是否合法、求所有合法出栈序列、入栈次数、出栈次数、

【代码】C语言数据结构算法之求出栈序列个数、判断出栈序列是否合法、求所有合法出栈序列、入栈次数、出栈次数、

weixin_63381305的博客 957

出栈序列:入栈顺序为从1到n,输入出栈顺序,判断它是否合法。

出栈序列:入栈顺序为从1到n,输入出栈顺序,判断它是否合法。

m0_72949559的博客 1118

判断出栈入栈的操作序列是否合法

来自数据结构的课下作业∶ 1.假设以I和O分别表示进栈和出栈操作,栈的初态和终栈均为空,进栈和出栈的操作序列可表示为仅由I和O组成的序列。 (1)下面所示的序列中哪些是合法的? (2)通过对(1)的分析,设计一个算法判定所给的操作序列是否合法。若合法返回真;否则返回假。(假设被判定的操作序列已存入一维数组中)A.IOIIOIOO B.IOOIOIIO C.IIIOIOIO D.IIIOOIOO 思路:每进行一次操作就判断一次,如果是I则I_count加一 反之o_count加一,只要后者大于前者

qq_62860588的博客 3981
上一篇: C语言-数组名真的不是指针
下一篇: SQL server 2008 R2 图文安装教程(附资源)
syzdev
博客等级 码龄9年 852粉丝 149原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值