zoukankan      html  css  js  c++  java
  • 栈的压入、弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
     
     解题思路:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。
     
     1 bool IsPopOrder(const int* pPush,const int* pPop,int nLength)
     2 {
     3  bool bPossible=false;
     4  if(pPush!=NULL&&pPop!=NULL&&nLength>0)
     5  {
     6   const int* pNextPush=pPush;
     7   const int* pNextPop=pPop;
     8   std::stack<int> stackData;
     9    
    10  while(pNextPop-pPop<nLength)
    11  {
    12    while(stackData.empty()||stackData.top()!=*pNextPop)
    13    {
    14        if(pNextPush-pPush==nLength)
    15        break;
    16        stackData.push(*pNextPush);
    17        pNextPush++;
    18    }
    19    if(stackData.top()!=*pNextPop)
    20    break;
    21   
    22   stackData.pop();
    23   pNextPop++;
    24 }
    25  if(stackData.empty()&&pNextpop-pPop==nLength)
    26  bPossible=true;
    27 }
    28 return bPossible;
    29 }
  • 相关阅读:
    ab(http)与abs(https)压测工具
    Q_DECLARE_PRIVATE与Q_DECLARE_PUBLIC
    QMetaObject::connectSlotsByName
    使用QStringBuilder进行字符串连接
    源码必须是UTF-8,QString需要它
    Qt开发中文显示乱码
    qDebug 的使用
    qt 4.6 qmake Reference
    qmake-variable-reference
    Qt学习网站
  • 原文地址:https://www.cnblogs.com/wxdjss/p/5604207.html
Copyright © 2011-2022 走看看