对于数据结构的问题,如果思路稍有不对,就容易陷入逻辑混乱。我希望自己对数据结构的理解,能够给大家一点帮助。我会将所有我有过心得的问题在我的博客上写出来,欢迎大家浏览,如果有什么不对的地方,还请大家指正,有问题可以给我留言,我会尽量解决,谢谢。

声明一下我写博客的初衷:不是炫耀,而是回报。因为我在计算机方面的知识好多都从网上找到答案,因此我也

将自己搜寻整理的材料,自己写的材料,展示到网上,算是尽一份力吧。

一个经典问题如下(不愿意看思路的可以直接看红色字体部分):

一个栈的入栈序列是a,b,c,d,e则栈的不可能的输出序列是:()

A edcbd         B decba           C dceab            D abcde

栈之根本——先进后出(first in,lastout)初次接触到这个问题的人,或许会认为入栈abcde,所以出栈只能是edcba所以BCD都不对。

其实是这个问题描述有歧义,应该是分段入栈的顺序,也就是说,可能先入栈a,取出a,入栈b,取出b……,所以D也是可能的。

知道这个意思了以后,就要明确这个问题的矛盾根本所在:第一次出栈d,说明什么?说明a,b,c一定早已入栈(入栈顺序决定的)。那么在出栈d以后,a,b,c的出栈顺序一定是c,b,a,而不用理会中间穿插着出栈了d后面的字符(因为可以再入栈,再出栈嘛)。所以立即选中C,不用犹豫,理由简单:d出栈了,abc一定已经入栈,那么abc只能以cba的顺序出栈,C不符合,OK!This problem is so esay, Thanks for my teacher Wang Shanshan.

数据结构中的思路一定要单一,要简明,抓住问题根本,万不可考虑过多,试探法只有在不知道解题思路的情况下去尝试,尝试多了,你会发现,逻辑容易混乱,俗称“我晕”!

转载于:https://www.cnblogs.com/jianheng/p/4102643.html

数据结构经典问题——出栈顺序 转载至:canlynet微博相关推荐

  1. 出栈顺序 与 卡特兰数(Catalan)的关系

    一,问题描述 给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列? 比如入栈序列为:1 2 3  ,则出栈序列一共有五种,分别如下:1 2 3.1 3 2 ...

  2. 数据结构之出栈顺序题(秒杀技巧)

    1.先导知识:栈是什么? 栈的定义:栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈 ...

  3. 数据结构----依据出栈顺序判断所需的最少栈空间

    1 问题描述 问题: 若元素 a,b,c,d,e,f,g 顺序进栈,且出栈顺序是 b,d,c,f,e,a,g 则栈的容量至少是_____ 答案:3 2 解法描述与分析 2.1 解法描述 记 1,2,3 ...

  4. 数据结构----出栈顺序有效性的判断

    1 问题描述 问题1:若元素 a,b,c,d,e,f 顺序进栈, 则不准许的出栈顺序是 A. d,c,e,b,f,a    B. c,b,d,a,e,f    C. b,c,a,e,f,d    D. ...

  5. 判断出栈顺序的合法性(面试题)

    判断出栈顺序的合法性 "栈"是一种限制性线性表,是将线性表的插入.删除操作限制为仅在表的一端进行,一般将能够插入.删除的一端称为栈顶,表的另一端称为栈底.当栈中没有元素时称为空栈. ...

  6. (24) 不可能的出栈顺序

    一.问题描述 给定两个数组,一个进栈顺序,一个出栈顺序.判定出栈数组的出栈顺序是不是有可能的. 二.Code 1 package algorithm; 2 3 import java.util.Arr ...

  7. 判断栈的出栈顺序是否正确

    一 问题描述:      两个数组pPush和pPop分别存储了压栈序列和出栈序列,如何判断出栈序列是否正确,假设元素不重复.      需要实现的函数: bool isStackOutRight(i ...

  8. 蓝桥杯 出栈顺序问题引发的思考以及递归的优化(缓存池)

    蓝桥杯 出栈顺序问题引发的思考以及递归的优化(缓存池) 关于递归的优化和思考 在我们IT圈内有句话,普通程序员用迭代,天才程序员用递归.诚然,递归确实能够将许多复杂的问题简化,但是问题来了,由于递归采 ...

  9. 【PAT甲】1051 Pop Sequence (25分)判断出栈顺序的合法性

    problem 1051 Pop Sequence (25分) Given a stack which can keep M numbers at most. Push N numbers in th ...

  10. 出栈顺序(栈和队列)B

    <center><h2>问题 B: 出栈顺序(栈和队列)</h2><span class="green">时间限制: </sp ...

最新文章

  1. Eclipse中看java源代码
  2. 测试php是否连接mysql_如何测试php是否连接mysql成功
  3. 字符指针与字符串变量的转换
  4. http协议报文格式原理图
  5. 自己动手打造属于自己的智能家居(二)
  6. Opencv2.X以上Mat类型与IplImage*的转换
  7. easyui添加删除表格任意行
  8. 双目立体匹配算法:ELAS
  9. Linux下复制粘贴快捷键
  10. 证件照修改宽高和体积的工具
  11. PDF怎么编辑修改文字?
  12. Redis入门(2):五大数据类型(key,string,list,set,sortset)将其实战,配置文件详解,发布与订阅
  13. 闲聊Robots协议
  14. 全新一代主播带货直播全套设备详细介绍
  15. 电脑系统还原节点怎么创建
  16. Windows/Linux获取Mac地址和CPU序列号实现
  17. 无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 1870(aptd)持有 的解决问题
  18. 华三H3C交换机配置端口聚合之二层端口静态和动态聚合
  19. Netron展示pytorch模型结构
  20. 基于微信小程序旅游管理系统

热门文章

  1. 螺旋数字的python实现
  2. Camshift算法(1)
  3. JavaScript中清空数组最有效的三种方法
  4. 01_Navicat的快捷键学习
  5. JAVA自学作业02
  6. Android AR场景拍照技术实现(有关键源代码)
  7. ubuntu的无线网无法连上
  8. Office 2013和Office 365应用程序对电脑和移动操作系统支持情况分析
  9. ETL学习之八:添加日志记录
  10. python系统学习:第二周之字典应用