• 24.栈的push和pop序列[StackPushPopSequence]


    【题目】

    输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。

    比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。

    【分析】

    这到题除了考查对栈这一基本数据结构的理解,还能考查我们的分析能力。这道题的一个很直观的想法就是建立一个辅助栈,每次push的时候就把一个整数push进入这个辅助栈,同样需要pop的时候就把该栈的栈顶整数pop出来。

    【代码】

     C++ Code 
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     

    #include<iostream>
    #include<stack>
    using namespace std;

    bool IsPossiblePopOrder(int push[], int pop[], int n)
    {
        
    if (push == NULL || pop == NULL || n < 1)
            
    return false;

        
    int p1 = 0, p2 = 0;
        stack<
    int> mystack;
        
    while(p2 < n)
        {
            
    while(mystack.empty() || mystack.top() != pop[p2])
            {
                
    if(p1 < n)
                    mystack.push(push[p1++]);
                
    else
                    
    return false;
            }

            
    while(!mystack.empty() && mystack.top() == pop[p2])
            {
                mystack.pop();
                p2++;
            }
        }
        
    return true;
    }

    void test_case()
    {
        
    int push[] = {12345};
        
    int pop[] = {43521};
        
    int pop2[] = {43512};
        
    int n = sizeof(push) / sizeof(int);
        cout << IsPossiblePopOrder(push, pop, n) << endl; 
    // true
        cout << IsPossiblePopOrder(push, pop2, n) << endl; // false
    }

    【参考】

    http://zhedahht.blog.163.com/blog/static/25411174200732102055385/

    http://xingyunbaijunwei.blog.163.com/blog/static/765380672012330105813818/

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    Logistic回归
    朴素贝叶斯
    决策树
    K-邻近(KNN)算法
    快速排序
    归并排序
    希尔排序
    插入排序
    选择排序
    浅谈系统服务分发
  • 原文地址:https://www.cnblogs.com/hellogiser/p/3738791.html
Copyright © 2020-2023  润新知