您的位置:首页 > Web前端

剑指offer——判断是不是栈的弹出序列

2017-01-29 12:08 183 查看
设置一个辅助栈,如果下一个弹出的数字刚好是辅助栈顶数字,那么直接弹出。否则把压栈序列中还没有入栈的数字压入辅助栈,直到把需要出栈的数字压入栈顶为止。如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。

void IsPopOrder(const int* pPush,const int* pPop,int nLength)
{
bool bPossible = false;

if(pPush!=NULL&&pPop!=NULL&&nLength>0)
{
const int* pNextPush = pPush;
const int* pNextPop = pPop;
std::stack<int>stackData;
while(pNextPop-pPop<nLength)
{
while(stackData.empty()||stackData.top()!=*pNextPop)
{
if(pNextPush-pPush==nLength)
break;
stackData.push(*pNextPush);
pNextPush++;
}
if(stackData.top()!=*pNextPop)
break;

stackData.pop();
pNextPop++;
}

if(stackData.empty()&&pNextPop-pPop==nLength)
bPossible = false;
}

return bPossible;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: