关于元素出栈、入栈顺序的合法性的事儿

2021年9月7日 7点热度 0条评论 来源: Ashley zhao

要实现栈的出栈、入栈当然少不了使用栈,故一定要记得引入其头文件,否则……

对于栈来说,它的入栈顺序和其出栈顺序密切相关,比其先入栈的元素肯定比其后出栈,因为一定的遵守“先进后出”原则;

比如:入
入栈的序列(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;
}
    原文作者:Ashley zhao
    原文地址: https://blog.csdn.net/Y1730008223CONG/article/details/75807740
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。