文章目录

  • 1 引例
  • 2 做题方法
  • 3 原因
    • 3.1 选项D(4 3 1 2)的模拟

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个元素一共有 A44A_4^4A44​ 共24种排列(下表加粗斜体的排列为合法排列)

1234 1243 1324 1342 1423 1432
2134 2143 2314 2341 2413 2431
3124 3142 3214 3241 3412 3421
4123 4132 4213 4231 4312 4321

表格中加粗斜体的排列为合法排列一共有 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. 【2020团队天梯赛模拟题L2-1】 根据输出序列判断是否是栈的输出结果(C语言)

    [2020团队天梯赛模拟题L2-1] 根据输出序列判断是否是栈的输出结果(C语言) (因为找不到题目只有回忆写题了)题目描述:输出m,n,k3个整数,其中m代表栈的最大存储容量,n代表输出序列的个数, ...

  2. PAT甲级1051 Pop Sequence:[C++题解]模拟栈、判断序列是否是合法的出栈序列

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 题意:将1~N压栈,判断给定序列是否是合法的出栈序列. 对于序列1~N中的每个值i,先将其压入栈.然后对于它就有两种处理方法:要么压 ...

  3. 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

    目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...

  4. 车厢调度(判断是否为合法的出栈序列)

    时间限制: 1 Sec 内存限制: 128 MB [提交] [状态] 题目描述 有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合.假设从A方向驶来的火车有n节(n ...

  5. 序列元素IT面试题——判断合法出栈序列

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ 在技巧笔试口试上,我们常常会碰到这样一类题型,如给你一个入栈序列,然后再让你判断几个序列是否有可能为它的出栈序列,如: 入栈序 ...

  6. 数据结构:判断堆栈出栈序列是否有效

    描述:如果以序列"1,2,3,4"作为一个栈(初始为空)的输入,那么可得到输出序列"1,2,3,4"或"4,3,2,1"或"2,3 ...

  7. 合法的出栈顺序判断(c++)

    [问题描述] 将1,2...n依次入栈,并给出一段序列,用空格隔开,请判断这种出栈顺序是否存在. [输入] n和num[] [输出] "YES"or"NO" # ...

  8. 栈的压入序列和弹出序列是否匹配

    给两个数组pushed和poped,其中pushed为栈的压入序列,popped为栈的弹出序列,判断第一个序列是否是第一个序列的弹出序列.假设压入栈的所有数字均不相等. 分析:辅助栈判断. class ...

  9. c语言输出合法的出栈算法,c语言栈的实现以及操作

    此文章包含了栈的结构体实现,单数据类型实现,以及清空,判空,入栈,出栈,求栈顶元素的实现 栈作为一个最简单的数据结构,实现起来也非常容易,想想现在有一摞盘子,每次只能取走或放一个盘子且只能最上面进行操 ...

最新文章

  1. 如何提升 Linux 服务器安全的开源工具和技巧?
  2. python编程程序设计_程序设计入门—Python
  3. 火爆背后的挑战:直播平台的高并发架构设计
  4. 打通NTFS权限 文件共享各取所需
  5. 计算 JS 数组中最大最小值
  6. 【单元测试框架unittest】
  7. 6000个边缘Kubernetes节点驱动城市80万次智能停车,如何成为可能?
  8. android中自定义 toast,android 自定义Toast样式和显示方式
  9. 卡巴斯基7.0如何设置授权文件
  10. 女人总浑身都没有力气怎么回事儿
  11. android 根据颜色值修改背景图的背景色 最简单方法
  12. 物联网卡是做什么用的
  13. 如何用摄像头来测距(opencv)
  14. 01 Spark组件 —— Scala导言
  15. 吴恩达Deep learning笔记(一)
  16. Machine Learning 机器学习
  17. 激光雷达初体验 - Ubuntu 18.04 + 思岚科技 RPLIDAR A1M8 + ROS 上手使用
  18. 占位图和图片懒加载项目实战详解
  19. 汽车标准:全球EMC试验标准汇总。
  20. 地下水环境监测技术规范中采样部分

热门文章

  1. DHTML【2】--HTML
  2. juniper防火墙做ipsec ***必须开放的端口
  3. 类别继承-程序代码再用
  4. Python爬虫(二)_urllib2的使用
  5. C# 接口的作用浅谈举例(转)
  6. tideways+xhgui搭建php 7的性能测试环境
  7. 项目管理三大认证体系,该选择谁?
  8. 小图标文字对齐的终极解决方案
  9. OC第二节 继承、初始化⽅法、便利构造器
  10. oracle合并查询