zoukankan      html  css  js  c++  java
  • Tarjan中栈的分析与SLT栈的实现

    首先看一下手写的栈:

    1 do{
    2     printf("%d ",stack[index]);
    3     visit[stack[index]]=0;
    4     index--;
    5     }while(x!=stack[index+1]);//出栈,并且输出。
    6 printf("
    ");

    我们可以发现。x是与index的上一个元素比较的

    举个例子

    栈:1 3 2 4 5     x=2

    这样的话会输出 5  4   2

    但是stl不支持和栈顶的上一个元素比较,因为上一个元素一定是被pop掉的。

    那么我们可以怎么实现呢?

    1.首先我们需要明白一点,如果我们把循环的条件改为

     1 x!=stack.top; 

    那么当栈已经空的时候,还是会执行一下判断操作,这样就会导致re,

    所以我们可以记录下pop之前的元素,这样就可以保证在判断的时候不会越界,而且是与pop之前的元素进行比较的

    code:

    1 int h;
    2 do
    3 {
    4     h=s.top();
    5     if(!color[s.top()])
    6     color[s.top()]=colornum;
    7     vis[s.top()]=0;
    8     s.pop();
    9 }while(now!=h);

    2.一般的do while语句都可以用while语句来实现

    我们如果单纯的把do while改成while,

    那么在上面的例子中会输出 5  4

    所以我们还需要判断一次,把当前的栈顶给输出

    代码:

     1 while(now!=s.top())
     2 {
     3     if(!color[s.top()])
     4     color[s.top()]=colornum;
     5     vis[s.top()]=0;
     6     s.pop();
     7 }
     8 if(!color[s.top()])
     9 color[s.top()]=colornum;
    10 vis[s.top()]=0;
    11 s.pop();

    如果你还有其他什么写法的话欢迎发表评论或者通过其他方式联系我。

    谢谢

  • 相关阅读:
    next_permutation函数(全排列)
    滚动数组
    多重背包问题
    ubuntu12.04硬盘安装
    UBUNTU12.04下安装配置体验gnome3
    给Ubuntu安装KDE桌面 [转]
    Ubuntu 13.04 用户安装 gnome 3.8 桌面
    ubuntu下安装wine
    ubuntu 安装输入法(fcitx)
    js 对url进行编码和解码的三种方式
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7149378.html
Copyright © 2011-2022 走看看