所有代码均通过G++编译器测试,仅为练手纪录。
//面试题22:栈的压入、弹出序列
//题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
// 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压栈序列,
// 序列4,5,3,2,1是该压栈序列对应的一个弹出序列,
// 序列4,3,5,1,2就不可能是该压栈序列的弹出序列。
//面试题22:栈的压入、弹出序列
//题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
// 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压栈序列,
// 序列4,5,3,2,1是该压栈序列对应的一个弹出序列,
// 序列4,3,5,1,2就不可能是该压栈序列的弹出序列。
bool StackJudgeOrder(const int *pPushOrder,const int *pPopOrder,int nSize)
{
if(NULL == pPushOrder || NULL == pPopOrder || nSize <= 0)
{
return false;
}
bool bResult = false;
const int *pNextPush = pPushOrder;
const int *pNextPop = pPopOrder;
stack<int> stackData;
while(pNextPop - pPopOrder < nSize)
{
while (stackData.empty() || stackData.top() != *pNextPop)
{
if(pNextPush-pPushOrder == nSize)
{
break;
}
stackData.push(*pNextPush);
++pNextPush;
}
if(stackData.top() != *pNextPop)
{
break;
}
stackData.pop();
++pNextPop;
}
if(stackData.empty() && pNextPop-pPushOrder == nSize)
{
bResult = true;
}
return bResult;
}
ZhaiPillary
2016-12-25