输入两个整数序列,第一个序列表示栈的压入顺序,判断两个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。
bool isPopOrder(const int *pPush,const int *pPop,int nLength)
{
bool isPossible=false;
if (pPush == NULL || pPop == NULL || nLength <= 0)
{
stack<int> dataStack;
const int *pNextPush = pPush;
const int *pNextPop = pPop;
while (pNextPop - pPop < nLength)
{
while (dataStack.empty() && dataStack.top()!=*pNextPop){
if (pNextPush - pPush == nLength)
break;
dataStack.push(*pNextPush);
pNextPush++;
}
if (dataStack.top() != *pNextPop)
break;
dataStack.pop();
pNextPop++;
}
if (dataStack.empty() && pNextPop - pPop == nLength)
isPossible = true;
}
return isPossible;
}