题目大意: 给出一个入栈序列,再给一个序列,要你判断这个序列是不是这个入栈序列的出栈序列..
什么是入栈序列,大概就是能通过入栈出栈一系列骚操作得到的一个序列。
以1 2 3 4 5为例子吧
第一次也没什么骚操作了,只能入栈了是吧^_^.
然后第二次可以把二入栈(做法2),也可以把它直接出栈(做法1)(先入栈然后马上出栈)
我们选择将2直接出栈 此时总结下状态 栈内有1,栈外有2 待处理的数字就有3、4、5这两个。处理3、4、5时也是类似的,不过这时候如果栈内不为空(这时候有1),就可以考虑把1也出栈。
让我们快进一下.. 考虑这种情况
这种情况下 序列 2 3 4 1 5和 2 3 4 5 1 都是正确的出栈序列。
接下来是代码实现了 我们开一个数组a存入栈序列,再开一个数组b存验证序列,开一个栈实现模拟这个过程。
下面给出核心代码。 t是指向数组b当前要检查的数字。
for(j=1;jq;stack p;
for(i=1;i>n;t=1; memset(a,0,sizeof(a));memset(b,0,sizeof(b));
for(j=1;j>a[j];
}
for(j=1;j>b[j];
}
for(j=1;j
关注
打赏