首页 > 其他 > 详细

【数据结构】栈的压入、弹出序列

时间:2016-02-29 20:08:20      阅读:224      评论:0      收藏:0      [点我收藏+]

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等,例如序列1,2,3,4,5是某栈的压栈序列,序列,4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2不是该压栈序列的弹出序列。


    一样的。我们需要确定这个序列的弹出顺序,我们需要建立一个辅助栈。在栈的压入与弹出中。我们压入以后的数据能够弹出。但是弹出以后被弹出的这个数据不能够在被压回去了。因为对于弹出序列来说。数据具有使用的单一回值性。不允许反复。那就是2个数据了。

    例如1,2,3,4,5,它的4,5,3,2,1,的弹出序列过程是这样的:

    技术分享然后对于题中给出的4,3,5,1,2:

技术分享所以根据这样的思路。我们写出代码:

bool IsPopOrder(const int* pPush,const int* pPop,int nLength)
{
    bool bPossible = fales;
    if(pPush != NULL && pPop != NULL && nLength > 0)
    {
        const int* pNextPush = pPush;
        const int* pNextPop = pPop;
        
        stack<int>stackData;
        
        while(pNextPop - pPop < nLength)
        {
            while(stackData.empty() || stackData.top() != *pNextPop)
            {
                if(pNextPush - pPush == nLength)
                    break;
                    
                stackData.push(*pNextPush);
                
                pNextPush ++;
            }
            
            if(stackData.top() != *pNextPop)
                break;
                
            stackData.pop();
            pNextPop++;
        }
        if(stackData.empty() && pNextPop - pPop == nLength)
             bPossible = true;
    } 
    return bPossible;
}

OK.

本文出自 “剩蛋君” 博客,转载请与作者联系!

【数据结构】栈的压入、弹出序列

原文:http://memory73.blog.51cto.com/10530560/1746053

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!