码迷,mamicode.com
首页 > 其他好文 > 详细

栈的压入,弹出序列

时间:2015-08-10 19:52:21      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

#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不是

 

栈的压入,弹出序列

标签:

原文地址:http://www.cnblogs.com/fengkang1008/p/4719013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!