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

    题目:判断一数字序列是否为这些数字入栈的一种出栈方式

    思路:

    首先申请一个辅助栈来模拟进栈出栈,然后判断栈顶元素和出栈数字是否一致,不一致则入栈序列依次进栈,直到栈顶元素和出栈数字一致时:弹出栈顶元素,出栈序列的指针后移,当进栈序列最后一位数字进栈并且它和出栈数字不相符的话,证明弹出序列不正确。

    代码如下:

    #include<iostream>
    #include<stack>
    using namespace std;
    bool isorder(const int *push,const int * pop,int length)
    {
        if(push!=NULL && pop!=NULL && length>0)
        {
            bool result=false;
            const int *newpush=push;
            const int *newpop=pop;
            stack<int> data;
            while(newpop-pop<length)
            {
                //如果栈为空或者栈的最上面不等于要弹出的数,则入栈
                if(data.size()==0||*newpop!=data.top())
                {
                    data.push(*newpush);
                    newpush++;
                    //最后一个数已经进栈
                    if(newpush-push>=length)
                    {
                        //如果栈的最上面不等于要弹出的数,而此时最后一个数已经进栈,证明不是出栈序列
                        if(*newpop!=data.top())
                            break;
                    }
                }
                else{
                    //如果要弹出的数字和栈顶元素一致,则栈弹出
                    data.pop();
                    newpop++;
                }
            }
            //如果栈为空并且弹出序列到达末尾,则证明是出栈序列
            if(newpop-pop==length && data.size()==0)
                result=true;
            return result;
        }
    }

    测试代码及运行结果:

    int main()
    {
    int a[5]={1,2,3,4,5};
    int b[5]={4,5,3,2,1};
    int c[5]={4,3,5,1,2};
    cout<<isorder(a,b,5)<<endl;
    cout<<isorder(a,c,5)<<endl;
    return 0;
    }

  • 相关阅读:
    【人生苦短,我学Python】个人学习笔记——str.count方法
    微信支付问题解决
    针对listview上面的按钮点击事件的操作
    Android界面之间的跳转和返回
    贪吃蛇
    数据库的连接
    Android中实现圆的面积的计算问题
    关于安卓环境的搭建问题
    python 获取cpu、内存、硬盘等实时信息 psutil
    python 配置文件
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4579018.html
Copyright © 2011-2022 走看看