一个序列的进栈顺序为abcde则不可能的出栈顺序为

在找工作做笔试题遇见过好几次类似的题目,所以通过查资料并找了其中一道题目进行记录

题目:

栈是一种先进后出的数据结构,一个序列的进栈顺序为abcde,那么不可能的出栈顺序为(  C)

A. dcbae              B. abcde                   C. adbec                   D. edcba

 

分析:栈的出栈是遵循先进后出的原则,abcde的进栈顺序并不是一次性的按照abcde入栈,也可能是先入栈一部分再出栈一部分在进行入栈,整体的入栈顺序是不变的依然是abcde。所以拿A选项分析,可以是先入栈abcd,再出栈dbca,再入栈e,再出栈e的步骤进行入栈出栈操作。所以不可能的顺序是选项C。
  出栈的元素顺序可以遵守的规律如下: 

  •       在原序列中相对位置比它靠前的,也就是比它先入栈的,出栈顺序必须是逆序; 
  •   在原序列中相对位置比它大的,也就是比它后入栈的,出栈顺序没有要求; 
  •   以上两点可以间插进行。

以选项中出栈的第一个元素为基准,判断它后面的元素是否满足上述规律

  • 16
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这道题可以使用模拟的方法来解决。 首先,我们将6、5、4、3、2、1按照给定的顺序进栈,然后从1开始尝试出栈。每次出栈时,我们判断当前顶元素是否等于要出栈的元素,如果是,则弹出该元素;如果不是,则继续将元素进栈,直到找到需要出栈的元素或者为空。如果最终整个序列都能成功出栈,则说明该出栈序列是合法的。 我们可以尝试用这种方法来验证四个给定的出栈序列: 1. 1 2 3 4 5 6 -> 6 5 4 3 2 1 从1开始尝试出栈,先出1,然后2、3、4、5、6依次进栈。接下来出6、5、4、3、2、1,整个序列能够成功出栈,因此该出栈序列是合法的。 2. 1 2 3 4 5 6 -> 4 5 3 2 1 6 从1开始尝试出栈,先出1,然后2、3进栈。此时顶元素为3,但需要出栈的元素是4,因此我们继续将4、5进栈。此时顶元素为5,但需要出栈的元素是4,因此我们继续将6进栈。此时顶元素为6,但需要出栈的元素是4,因此该出栈序列不合法。 3. 1 2 3 4 5 6 -> 3 2 1 6 5 4 从1开始尝试出栈,先出1,然后2进栈。此时顶元素为2,但需要出栈的元素是3,因此我们继续将3、4、5、6依次进栈。此时顶元素为6,需要出栈的元素是3,因此我们弹出6、5、4。此时顶元素为3,需要出栈的元素也是3,因此我们弹出3、2、1,整个序列能够成功出栈,因此该出栈序列是合法的。 4. 1 2 3 4 5 6 -> 5 4 3 2 1 6 从1开始尝试出栈,先出1,然后2进栈。此时顶元素为2,但需要出栈的元素是5,因此我们继续将3、4、5依次进栈。此时顶元素为5,需要出栈的元素也是5,因此我们弹出5。此时顶元素为4,需要出栈的元素是4,因此我们弹出4。此时顶元素为3,需要出栈的元素是3,因此我们弹出3。此时顶元素为2,需要出栈的元素是2,因此我们弹出2。此时顶元素为1,需要出栈的元素是1,因此我们弹出1。此时为空,但需要出栈的元素是6,因此该出栈序列不合法。 综上所述,不是合法的出栈序列是第2个:4 5 3 2 1 6。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值