给出一个入栈序列,一个出栈序列。判断,是否存在合法的出入栈操作,满足这样的入栈序列和出栈序列。
思路:故事重现一遍,能顺利完成所有操作就存在,中间出现矛盾就不存在。所有数都要在栈里走一回。
如果栈为空,没的出,只能是要入栈;
如果栈顶元素不是要出栈的元素就继续入栈;
如果栈顶元素是要出栈的元素,就要出栈(注意只有这样才能出栈);
如果最后出栈序列的元素都出来了,栈也为空了,说明出入栈序列是合法的。
如果最后栈中元素出不来,说明序列不合法。
代码:
bool isPossible(int in[], int out[], int n)
{
if(n<=0)
return false;
stack<int> s;
int i,j;
i=j=0;
while(j<n)
{
while(s.empty()||s.top()!=out[j])
{
if(i == n)
break;
s.push(in[i++]);
}
if(s.empty()||s.top()!=out[j])
break;
s.pop();
j++;
}
if(s.empty() && j==n)
return true;
return false;
}