zoukankan      html  css  js  c++  java
  • 栈的push、pop序列

    题目:输入两个整数序列。其中一个序列表示栈的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序列。

    基本思路:

    (1)用两个指针分别指向数组的头部,pPush,pPop;

    (2)根据pPop所指向的值,让pPush指针所指向的值进栈,直到栈顶元素和*pPop相等,同时记录pPush的进栈次数,只有少于序列长度才可以;

    (3)比较栈顶元素和pPop,若相等则弹出,同时pPop后移,重复该过程直到不相等或者栈为空。

    (4)如果序列长度已经入栈完毕且出栈也完毕,则可能,若进完没出完说明该序列不可能出现,若没进完则重复步骤(2)(3);

     1 bool  function(int *pPush,int * pPop,int length){
     2       int pushnum=0;
     3       int popnum=0;
     4       Stack s;
     5       bool tag=false;
     6       while(pushnum!=length){
     7           whlie(isEmptyStack(s)||GetStackHead(s)!=*pPop){
     8                Push(s,*pPush);
     9                pPush++;
    10                pushnum++;
    11                if(pushnum==length)
    12                      break;
    13           }
    14           while(!isEmptyStack(s)&&GetStackHead(s)==*pPop){
    15                Pop(s);
    16                popnum++;
    17                pPop++;
    18            }
    19           if(pushnum==popnum&&pushnum=length)
    20                tag=true;
    21       }
    22       return tag;
    23 }

     

  • 相关阅读:
    C#下对象与JSON串互相转换
    靠纯技术是否能渡过中年危机
    个人小结
    Qt:Drag-Drop操作在QGraphicsView及Model/View框架下的实现
    Lex&Yacc Parser错误发生后再次parser之前恢复初始状态
    lex中yyrestart()的使用
    go特性-数组与切片
    go特性-defer
    golang实现mysql udf
    go创建动态库
  • 原文地址:https://www.cnblogs.com/GoAhead/p/2521155.html
Copyright © 2011-2022 走看看