以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 计算机考研交流 』   (http://bbs.xml.org.cn/list.asp?boardid=67)
----  [求助]出栈顺序判断程序  (http://bbs.xml.org.cn/dispbbs.asp?boardid=67&rootid=&id=63312)


--  作者:LarryG
--  发布时间:6/1/2008 11:13:00 AM

--  [求助]出栈顺序判断程序

任意一个由1,2,……n组成的排列,判断其是否是
1 ,2,3 ……n n个数进行一系列的出栈进栈 操作(最后全部出栈)后所得的序列


--  作者:meirui
--  发布时间:6/1/2008 11:51:00 AM

--  
思路:无论如何调度,我们的操作都是入栈和出栈,设定入栈为1,出栈为0,对n个元素有2n次这样的操作,例如n=4,则有操作11110000、10101010等,于是我们有理由构造一个操作命令队列b[],注意这个队列中有三个要求:
1.其中1和0的数目要相等,代表入栈和出栈操作完整,入栈操作=出栈操作
2.从左往右1的数目一定不能小于0的数目,否则没有栈中元素可以出栈
3.数列第一个元素一定为1,最后一个一定为0,即第一次操作必须为入栈,最后一次操作必须
   为出栈,这样就只需考察中间n-2元素,开头和结尾的数据没有必要考虑
于是按照这样的规则,就可以对n个元素进行全排列,找出符合规则的序列
--  作者:LarryG
--  发布时间:6/1/2008 1:24:00 PM

--  
谢谢!很有启发性!!
--  作者:jeJee
--  发布时间:6/1/2008 2:21:00 PM

--  
算法实际上就是对入栈出栈的模拟
有入栈序列a[] 和出栈序列 b[] 和一个栈 s
1,如果要入栈的数和要出栈的数相同,则直接入栈再出栈
2,如果不同,则先判断栈顶的数是否就是要出栈的数,如果是则直接出栈
3,否则就把要入栈的数入栈
4,重复1,2,3直到所有要入栈的数都已入栈
5,对于栈中剩下的数,如果栈顶元素等于出栈元素则直接出栈,如果不等则表明出栈序列非法
6,重复5直到栈中元素全部处理完,或出栈序列非法
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
14,610.350ms