主题:[讨论]求教大家判断一个出栈序列的合法性的问题
wwwmacy
[专家分:0] 发布于 2007-10-22 22:22:00
判断输出序列的合法性:
思路是:出栈时候,如果连续的两个出栈元素,假设为 a b,如果在入栈队列中的 a b 中间的元素, 在出栈时候都已经出栈,那么这个出栈序列就是合法的
不知道这样行不行,具体方法怎么实现,或是有没有更简单的算法,我比较糊涂
回复列表 (共3个回复)
沙发
luning298 [专家分:130] 发布于 2007-10-23 19:07:00
假设以S和X分别表示进栈和出栈的操作,并且初态和终态为栈空的进栈和出栈的操作序列,可以表示为仅由S和X组成的序列。称可以实现的栈的操作序列为合法序列(例如SSXX为合法的,SXXS为非法的序列)。
所以合法的栈的操作序列必须满足两个条件:
1)在操作序列中的任何前缀(从开始到任何一个操作时刻)中,S的个数不得少于X的个数。
2)整个操作序列中S和X的个数相等。
板凳
mt0508030112 [专家分:0] 发布于 2007-10-26 22:54:00
SXXS为非法的序列 这个 好像满足你说的那两个条件啊 为什么是非法的 请教了
3 楼
海上飞洪 [专家分:520] 发布于 2007-10-27 19:35:00
[quote]SXXS为非法的序列 这个 好像满足你说的那两个条件啊 为什么是非法的 请教了[/quote]
满足了条件2,但没有满足条件1
在最后一个S之前,S的个数是小于了X的数目,故不合法
要理解好"任意"两个字
我来回复