博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tarjan中栈的分析与SLT栈的实现
阅读量:6094 次
发布时间:2019-06-20

本文共 870 字,大约阅读时间需要 2 分钟。

首先看一下手写的栈:

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

 

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

谢谢

 

转载地址:http://hegwa.baihongyu.com/

你可能感兴趣的文章
Java中正则表达式
查看>>
react native 集成人脸识别 --android
查看>>
回忆里的那个人
查看>>
React.js 集成 Spring Boot 开发 Web 应用
查看>>
Java并发编程(2) AbstractQueuedSynchronizer的内部结构
查看>>
cheatEngine破解百度云加速的办法
查看>>
react 高阶组件的 理解和应用
查看>>
Fabric CA环境的集成
查看>>
关于HTTP协议你需要知道这些
查看>>
一步步搭建物联网系统——GNU/Linux 强大且Free
查看>>
NoSQL应用征文大赛,赢取iPhone6和火星车!
查看>>
Docker集中化web界面管理平台shipyard
查看>>
「诚挚出新」LeanCloud 前所未有的变化
查看>>
题解 CF520E 【Pluses everywhere】
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
人类的目标
查看>>
阿里安全资深总监张玉东解读安全技术9大新趋势
查看>>
scala 小结(一)
查看>>
索尼将出售电池业务 未来或投资人工智能等新兴技术领域
查看>>
甲骨文宣布在亚太区推出重要销售转型战略,全面拓展云业务
查看>>