要实现栈的出栈、入栈当然少不了使用栈,故一定要记得引入其头文件,否则…
对于栈来说,它的入栈顺序和其出栈顺序密切相关,比其先入栈的元素肯定比其后出栈,因为一定的遵守“先进后出”原则;
比如:入
入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)----则合法;
入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1)----则不合法;
bool IsStack(const int* pPush,const int*pPop,int length)
{
std::stack<int> stack;//定义一个栈
bool poll=false;//这个栈未被使用
if(NULL!= pPush&&NULL!=pPop&&length>0)
{
const int* pNextPush=pPush;//保存入栈的序列
const int* pNextPop=pPop;//保存出栈的序列
while(pNextPop-pPop<length)
{
while(stack.empty()||stack.top()!= *pNextPop)
{
if(pNextPush-pPush==length)
break;
stack.push(*pNextPush);
pNextPush++;
}
if(stack.top()!=*pNextPop)
break;
stack.pop();
pNextPop++;
}
if(stack.empty()&&pNextPop-pPop==length)
poll=true;
}
return poll;
}