栈的压入、弹出序列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
bool IsPopOrder(const int* pPush, const int* pPop, int nLength)
{
    if (pPush == nullptr || pPop == nullptr || nLength <= 0)
        return false;
 
    std::stack<int> stackData;
    const int* pNextPush = pPush;
    const int* pNextPop = pPop;
    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)
        return true;
    else
        return false;
}

  

posted on   Noora&w  阅读(52)  评论(0编辑  收藏  举报
努力加载评论中...

点击右上角即可分享
微信分享提示