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

    #include <iostream>
    #include <stack>
    using namespace std;
    
    
    bool IsPopOrder(int *pPush, int *pPop, int length)
    {
        if(NULL == pPush || NULL == pPop || 0 >= length) return false;
    
        bool isPossible = false;
        const int *pNextPush = pPush;
        const int *pNextPop = pPop;
    
        stack<int> stackData;
    
        while(pNextPop - pPop < length) // 对出栈序列进行测试
        {
            /**
             * 若出栈序列中有i,则在进栈队列中i之前的元素必然要进栈
             */
            while(stackData.empty() || stackData.top() != *pNextPop)
            {
                if(pNextPush - pPush == length) break; // 进栈队列为空
    
                stackData.push(*pNextPush);
                ++pNextPush;
            }
    
            if(stackData.top() != *pNextPop) break; // 栈顶元素必然是要出栈元素
    
            stackData.pop();
            ++pNextPop;
        }
    
        if(stackData.empty() && pNextPop - pPop == length)
        {
            isPossible = true;
        }
    
        return isPossible;
    }

    问题

    判断一数字序列是否为这些数字入栈的一种出栈方式(前提:栈中的数字不重复)

    例如

    假设入栈的序列为:1 2 3 4 5

    那么4 5 3 2 1为一种弹出序列, 4 3 5 1 2不是

  • 相关阅读:
    3.25训练题
    hdu1495
    poj1426 宽搜
    高斯消元
    codeforces 999E 强联通分量
    hdu4289城市与歹徒 网络流
    蒟蒻的离散化模板
    樱花,素数筛
    【转】分圆问题:一个诡异的数列规律
    hdu1257最少拦截系统 贪心
  • 原文地址:https://www.cnblogs.com/fengkang1008/p/4719013.html
Copyright © 2011-2022 走看看