【学院派】出栈序列问题

本文探讨如何判断一个序列是否是合法的栈出栈序列,通过两种方法:1) 分析出栈顺序的规律,证明形如312的序列不可能;2) 通过过程再现,证明合理出栈序列有且仅有一种对应的操作过程。内容包括对小模型的分析、推广以及算法描述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考【面试题】判断一个序列是不是栈的输出序列

(虽然我觉得没有人会看我这篇东西,但是仍然声明,如有雷同,喊我修改)

扯个蛋:出栈序列问题在数据结构课程试卷中一般会有一个1~2分的选择题,我当年做这种题的时候从来不知道选对了没有。


方法1.出栈顺序312

小模型:对于一个进栈序列123,出栈的可能序列应该是这个序列的全排列的子集(吐舌头

全排列是{123}{132}{231}{213}{321}{312},不合理的出栈序列只有{312}

分析:3首先出栈,则栈中还有1和2,且1位于2下面(别在这里问为什么),此时2必定先出栈

结论:{312}的出栈序列是不可能的。

推广:对于任意一个进栈序列 1,...i,...j,...k....N,(其中 1<=i<j<k<=N),不可能产生形如 ...k...i...j...的出栈序列

换句话说,就是任意的一个出栈序列假设中,如果有3个元素,他们入栈的先后顺序是123,出栈顺序是312,那么这个出栈序列不可能。

一大堆废话,搞的跟高数一样。在数据结构考试里,一般给出5~7个元素,应该很容易就可以用肉眼找出符合312规律的序列。


方法2.过程再现

文头链接里的文章给出的是一种再现入栈/出栈过程的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值