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 }

     

  • 相关阅读:
    python定义函数时的默认返回值
    【UNIX网络编程】配置unp.h和apueerror.h
    【UNIX网络编程】套接字编程简介
    【UNIX网络编程】概述
    【VSCode】Ubuntu下VSC编译运行c++程序
    【UNIX网络编程】传输层:TCP、UDP和SCTP
    nginx跨域配置
    centOS7.*安装nginx和简单使用
    nginx日志切割
    nginx静态资源防盗链
  • 原文地址:https://www.cnblogs.com/GoAhead/p/2521155.html
Copyright © 2011-2022 走看看