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();

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

    谢谢

  • 相关阅读:
    1 绪论
    3.4 向量空间及其子空间的的基与维数
    3.3 极大线性无关组以及&向量的秩
    3.2 线性相关与线性无关的向量组
    3.1 n维向量空间及其子空间
    2.6 拉普拉斯定理
    2.5 克拉默法则
    2.4 行列式按行(列)展开
    2.3 行列式的性质
    2.2 n阶行列式的定义
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7149378.html
Copyright © 2011-2022 走看看