Tarjan中栈的分析与SLT栈的实现

首先看一下手写的栈:

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

我们可以发现。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();

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

谢谢

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java工会

JAVA 同步实现原理

Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:

8100
来自专栏决胜机器学习

正则表达式学习笔记

正则表达式学习笔记 (原创内容,转载请注明来源,谢谢) 首先,学习正则表达式,很推荐一篇博客,http://www.cnblogs.com/deerchao...

377120
来自专栏刘君君

JVM Specification notes 1 -Jvm Structure

摘要: Jvm Structure 正文: Java 虚拟机结构 Class文件格式 数据类型 原始类型(基本类型) 数值类型{整数[byte8 short1...

38670
来自专栏博岩Java大讲堂

Java虚拟机--虚拟机内存区域Java虚拟机内存区域

32080
来自专栏用户3030674的专栏

java单例模式

单例设计模式:解决一个类在内存中只存在一个对象  多用于环境变量设置等  单例模式的要求:1.只能有一个对象,禁止其他程序建立该类对象          2....

12610
来自专栏大闲人柴毛毛

深入Java虚拟机——JVM内存详解

在C++中,程序员拥有每一个对象的所有权,但与此同时还肩负着释放对象内存空间的责任;而Java由于有了虚拟机的帮助,程序员拥有对象的所有权的同时不再需要释放对象...

375130
来自专栏吴伟祥

Shell脚本学习总结(二) 流程控制 转

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

8320
来自专栏积累沉淀

JSON

JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式...

38580
来自专栏跟着阿笨一起玩NET

C#修饰符

C#中类及类型成员权限访问修饰符有以下四类:public,private,protected,internal。

26220
来自专栏守望轩

c#的细节(二)-修饰符

写在最前面的话: 《c#的细节》是我当初学习c#时候,做的一些学习笔记的整理,现在回头看来这些都是非常浅显的知识,是c#非常细节的地方,同时也是不能忽略的...

19670

扫码关注云+社区

领取腾讯云代金券