递归反转一个栈,要求空间复杂度为1,不许重新申请一个同样的栈...
分类:
其他好文 时间:
2015-08-14 17:07:02
阅读次数:
94
实现使用两个堆栈队列FIFO队列是一种数据结构(FIFO),后堆叠前进出的数据结构的(FILO)。两个栈实现的最简单的方法就是排队:队列中的第一个推栈,队列将数据顺序的第一个堆栈推入第二堆叠,然后叠加.两个规则:1)进队列,则直接压入第一个栈2)出队列,若果第二个栈不为空。直接pop(),如过第二个...
分类:
其他好文 时间:
2015-08-12 21:36:47
阅读次数:
120
题目大意:给出仙人掌图的定义:
1.必须是强连通
2.每条边只能属于一个环解题思路:在tarjan算法中加入点东西就可以判断了
只要该点能连到之前的点,那么形成环了,找到这个环的所有的边,并标记
如果有一条边被标记了两次了,那图就不是仙人掌图了关键是怎么找到这个环的所有边,我们可以引入另一个栈,这个栈存放的是边的序号
假设当前点为u,u点连回之前的点是v,那么就从栈里面找边,找到出发点为v...
分类:
其他好文 时间:
2015-08-12 01:18:57
阅读次数:
110
首先非常感谢‘hicjiajia’的博文:二叉树后序遍历(非递归)这篇随笔开启我的博客进程,成为万千程序员中的一员,坚持走到更远!折磨了我一下午的后序遍历中午得到解决,关键在于标记右子树是否被访问过,考虑过修改二叉树结点的数据结构,增加一个visit域,或者建一个栈存储已访问的结点。都比较麻烦没有调...
分类:
编程语言 时间:
2015-08-11 20:59:51
阅读次数:
147
在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;
区别:
静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。
动态建立类对象,是使用new运算符将对象建立在堆空间中。这个过程分为两步,第一步是执...
分类:
编程语言 时间:
2015-08-11 10:06:38
阅读次数:
169
点击打开链接
结题感悟:
其实吧,这题并不是很难,就是一个栈和队列的公共题,也就是按指定的方式(栈或队列)存取数据,但是为什么我自己写的栈和队列就是不能再杭电ac,而用java包中的栈和队列就秒过了,问题尚未找出原因,值得思考啊。不过可以趁此学学这两个类(尽量还是自己动手写的好啊)
栈:java.util 类 Stack
Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作...
分类:
其他好文 时间:
2015-08-10 01:57:24
阅读次数:
91
题意: 求长度大于等于K的公共子串的个数。位置不同就算不同。后缀数组求依次SA LCP, 然后就是统计答案了, 暴力统计n^2复杂度显然不可以, 我们可以利用lcp数组的"部分单调性", 用一个栈,栈中保存小于等于当前lcp的原数组的下标,两次统计, 第一次统计, 按B串统计, 把A串大于等于K的那...
分类:
编程语言 时间:
2015-08-07 22:03:51
阅读次数:
125
写在前面在项目中,对数组的操作还是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,这里记录一下这个知识点。栈栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈...
分类:
编程语言 时间:
2015-08-01 11:16:16
阅读次数:
281
这个题,哈哈,很无语。
题意:给出所有左括号跟右括号之间合法的距离,求出一个合法的括号序列。
由于括号肯定是快点匹配完最好,所以维护一个栈,若当前的左括号可以被匹配那就匹配否则丢一个左括号进去。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#...
分类:
其他好文 时间:
2015-07-31 18:23:56
阅读次数:
144