美文网首页
【面试题】入栈元素的出队序列问题

【面试题】入栈元素的出队序列问题

作者: Deeglose | 来源:发表于2017-09-30 15:38 被阅读61次

问题描述

这个问题经过我的思考,其实解法更加简单
一般性的问题是:有一组数和一个栈,给定这组数的入栈顺序,判断哪些出栈序列是不可能的。
譬如,对于1 2 3 4 5, 出栈序列4 5 3 2 1就是可能的
对应的操作如下:
1.压入 1 2 3 4
2.弹出 4
3.压入 5
4.弹出剩余的元素

问题是,这些操作序列是怎么得到的?

解法

使用两个队列和一个栈实现,如下图所示

示意图

入栈序列代表了入栈的顺序,一般就是题目给定的数。队列首部是第一个入栈的数。
临时栈用来临时存放入栈但是尚未弹出栈的数。
出栈序列就是结果。

一般的问题是已知入栈序列和出栈序列,判断出栈序列是否可能。
步骤:

  • 将给定的数按顺序放入入栈序列
  • 依次分析出栈序列的首部(第一个数)k,为了k第一个出栈,入栈序列中k以及k之前的所有数必须入栈,然后弹出k
  • 如果k不存在于入栈序列中,k必然是栈顶元素,弹出k即可
  • 如果k既不在栈顶也不在入栈序列中,则出栈序列不可能

以入栈序列 1 2 3 4 5,出栈序列4 5 3 2 1为例,过程如下:

为了使4第一个出栈所做的操作 余下的操作,使5入栈,然后弹出5,然后弹出所有元素。结果就是4 5 3 2 1

相关文章

  • 【面试题】入栈元素的出队序列问题

    问题描述 这个问题经过我的思考,其实解法更加简单一般性的问题是:有一组数和一个栈,给定这组数的入栈顺序,判断哪些出...

  • 225.用队列实现栈

    解题思路 1、队列与栈的区别:队列是先入队元素先出队,后入队元素后出队;栈是先入栈元素后出栈,后入栈元素先出栈。2...

  • 栈-N946-验证栈序列

    题目 概述:给定一个入栈序列和出栈序列,判断如果以入栈序列的顺序入栈,所给定的出栈序列的顺序是否是合理的 输入:入...

  • 入栈出栈序列问题

    时隔将近三年,我又准备在简书上发文章了,初衷依然是将自己对一些算法的理解和感悟记录下来。今天开始动笔时看了一下自己...

  • SynchronousQueue

    SynchronousQueue 无缓冲阻塞队列,用来在两个线程之间移交元素 模式相同则入栈(队),不同则出栈(队...

  • 一些常见的算法题目

    合法的出栈序列 已知1至n的数字序列,按顺序入栈,每个数字入栈后即可出栈,也可在栈中停留,返回等待后面的数字入栈出...

  • 算法+数据结构+栈

    堆栈 JVM中的堆栈 入栈出栈。假设序列为abcdefg等, 如果abc 出栈。a,b,c没有入,或a入a出,b入...

  • 汇编学习-入栈和出栈

    栈有两个基本的操作:入栈和出栈。入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈...

  • 漫画:如何用栈实现队列

    队列的特点是先入先出,出入元素是在不同的两端(队头和队尾),而栈的特点是先入后出,出入元素都是在同一端(栈顶)。 ...

  • Swift基础之实现一个栈

    首先栈是一个遵从“后进先出,先进后出”规则的序列。同时还有两个操作:入栈操作,将一个元素放入栈中;出栈操作,当栈不...

网友评论

      本文标题:【面试题】入栈元素的出队序列问题

      本文链接:https://www.haomeiwen.com/subject/jhzgextx.html