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

    题目:输入两个整数序列。其中一个序列表示栈的push 顺序,
    判断另一个序列有没有可能是对应的pop 顺序。
    为了简单起见,我们假设push 序列的任意两个整数都是不相等的。
    比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列。

    思路:建立一个栈,若栈不为空,检查栈顶元素是否与pop序列将要弹出的元素相同,若相同则弹出栈顶元素,若不同,则检查push序列,将push序列中将与pop序列将要弹出元素不同的全部压入栈,直到找到相同的,若在push剩下的元素中找不到与pop序列将要弹出的元素相同的元素,则这个pop序列不可能是push序列的一个弹出序列,循环下去,直到pop序列完成,或肯定了pop不是朴实的一个出栈顺序。

      基于以上分析,代码如下:

     1 bool IsPopSeries(int *push, int *pop, int n)
     2 {
     3     assert (push != NULL);
     4 
     5     assert (pop != NULL);
     6 
     7     assert (n > 0);
     8 
     9     int *Stack = NULL;
    10     int nTop = -1;
    11 
    12     if (NULL == (Stack = (int *)malloc (n * sizeof (int))))
    13     {
    14         printf ("Fail to malloc space to Stack!\n");
    15         exit(1);
    16     }
    17 
    18     int i = 0;
    19     int j = 0;
    20 
    21     while (j < n)
    22     {
    23         if (nTop >= 0)
    24         {
    25             // 若栈不为空则首先检查栈顶元素是否符合要求
    26             if (Stack[nTop] == pop[j])
    27             {
    28                 --nTop;
    29                 ++j;
    30 
    31                 continue;
    32             }
    33         }
    34 
    35         while ((i < n) && (push[i] != pop[j]))
    36         {
    37             // 在push序列中找下一个要弹出的元素
    38             Stack[++nTop] = push[i++];
    39         }
    40 
    41         if (i >= n)
    42         {
    43             // push序列找完了都没有找到pop序列中将要弹出的元素
    44             // 则pop不可能是push的弹出序列
    45             break;
    46         }
    47 
    48         ++i;
    49         ++j;
    50     }
    51 
    52     if (j < n)
    53     {
    54         return (false);
    55     }
    56     
    57     return true;
    58 }
  • 相关阅读:
    Nokitjs 系列-01
    栗庙科三考场路线图及过关技巧
    oracle创建库和表
    Eclipse 反编译插件安装jad
    在Eclipse中使用Maven插件 博客分类: Java相关技术
    eclipse svn安装
    eclipse tomcat内存溢出,加大内存
    eclipse如何修改dynamic web module version
    Eclipse 使用 Link 方式进行插件的安装
    eclipse中 将java项目转换为web项目 博客分类: Tomcat
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3056307.html
Copyright © 2011-2022 走看看