问题的由来:编号为1到n的n个元素,顺序的进入一个栈,则可能的出栈序列有多少种?对问题的转化与思考:n个元素进栈和出栈,总共要经历n次进栈和n次出栈。这就相当于对这2n步操作进行排列。问题等价于:n个1和n个0组成一2n位的2进制数,要求从左到右扫描,1的累计数不小于0的累计数,试求满足这条件的数有...
分类:
其他好文 时间:
2014-08-29 19:50:48
阅读次数:
271
【题意】
逆波兰表达式,又叫后缀表达式。
例如:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
【思路】
用一个栈存储操作数,遇到操作数直接压入栈内,遇到操作符就把栈顶的两个操作数拿出来运算一下,然后把运算结果放入栈内。
【Jav...
分类:
其他好文 时间:
2014-08-28 21:13:36
阅读次数:
247
写程序将一个栈按升序排序。对这个栈是如何实现的,你不应该做任何特殊的假设。
程序中能用到的栈操作有:push | pop |isEmpty
最容易想到的就是优先队列来做此题,容易实现。
另外我们可以再用一个栈来实现栈的升序排列。
优先队列:
//优先队列来实现
void sortStack(std::stack& vStk)
{
std::priority_queue, std::gr...
分类:
其他好文 时间:
2014-08-28 02:07:58
阅读次数:
197
2) { abc(--$n); } echo '$n='.$n.''; } abc(4); //输出 2 2 3 每次遇到函数调用就会开辟一个栈空间?>
分类:
Web程序 时间:
2014-08-28 00:44:28
阅读次数:
282
使用两个栈实现一个队列
队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO),
用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈,
出队列则将第一个栈的数据依次压入第二个栈,然后出栈.
两条规则:
1)进队列,则直接压入第一个栈
2)出队列,若果第二个栈不为空,直接pop(),如过第二个栈为空,
则把第一个栈中的数据全部压入第二个栈(第一个栈此时为空...
分类:
其他好文 时间:
2014-08-27 01:40:37
阅读次数:
230
题目大意:
有一串只含有 "(" ")" "[" "]" 的序列,问在该序列的 左右括号能分别配对的 所有子串中的含有方括号的个数的最大值,并输出相对应的子串。
做法:
利用一个栈来维护,每次如果有能与栈顶的元素配对的右边括号时,将该元素弹出,如果此时弹出的元素代表方括号,那么记录此时出现的下标。否则将该元素压进栈。
当然我们压进栈的是当前元素的下标。当处理完整个序列之后...
分类:
其他好文 时间:
2014-08-26 17:30:46
阅读次数:
151
题意 求一个序列a某一位的最长递增序列(lis)和最长递减序列(lds)中最小值的最大值
开始直接用DP写了 然后就超时了 后来看到别人说要用二分把时间复杂度优化到O(n*logn) 果然如此 用一个栈s保存长度为i的LIS的最小尾部s[i] top为栈顶即当前LIS的长度 初始s[1]=a[1] top=1 遍历整个序列 当a[i]>s[top]时 a[i]入栈
...
分类:
其他好文 时间:
2014-08-25 17:10:14
阅读次数:
258
前两篇文章中,已经介绍了使用vs2010编译lua5.1源码生成lua.lib 和 vs项目中使用c++调用lua,可以保证demo在vs上运行起来了。这里再详细介绍下c++和lua之间的相互调用以及原理。
c++与lua直接的调用,实际上通过一个栈结构来传递数据,该栈结构栈顶的索引值为-1,向栈底方向索引值依次为-1 ,-2......栈顶索引为1.栈结构里可以放函数,表,字符串,整形等各种l...
分类:
编程语言 时间:
2014-08-24 11:40:52
阅读次数:
290
题目链接:uva 12096 - The SetStack Computer
题目大意:一个栈,有5种操作;
PUSH:向栈中放一个空集合。DUP:复制栈顶集合。UNION:取栈顶的两个集合,取并集后放回。INTERSECT:取栈顶的两个集合,取交集后放回。ADD:取栈顶两个集合,将第一个集合作为元素放到第二个集合中,并将第二个集合放回栈。
每次操作后输出栈定集合中元素的个数。...
分类:
其他好文 时间:
2014-08-24 00:22:41
阅读次数:
288
实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。
push,pop和min函数的时间复杂度都为O(1)。
看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否?
如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值。
可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办。...
分类:
其他好文 时间:
2014-08-22 22:38:01
阅读次数:
176