队列(先进先出)和栈(先进后出)都是常用的经常讨论的基本的数据结构,本文要讨论的是一对有趣的问题:如何用两个栈(队列)实现一个队列(栈),下面将分别说明,并附示例代码。
1、用两个栈实现一个队列 基本思路:初始有两个空栈s1和s2,当入队列是,将元素加入s1,而出队列则从s2出,当然s1与s2之间存...
分类:
其他好文 时间:
2014-05-08 15:12:30
阅读次数:
397
很简单的题目,不过还是觉得要说一下。最小深度,很快想到bfs,层序遍历嘛。本科的时候实在是没写过多少代码,一开始居然想不到怎么保存一层的信息。后来想到可以压入一个特殊的对象,每次到达这个对象就知道是一层了。我用的是空指针,觉得这个适用性还是不错的。一层的节点入队结束后,应该压入一个NULL,当一层的节点都处理完,遇到NULL的时候,要在队列尾部再入队一个NULL,这是后一层的分界线嘛。
昨天在另...
分类:
其他好文 时间:
2014-05-08 11:09:28
阅读次数:
315
转载请注明出处: 题目:用两个队列模拟一个栈,即用两个队列的出队和入队操作,来实现栈的出栈和入栈操作。 思路:稍微画下草图,便不难想出该题的解决方法,思路如下: 假设有两个队列Q1和Q2,当二者都为空时,入栈操作可以用入队操作来模拟,可以随便选一个空队列,假设选Q1进行入栈操作,现在假设a,b,c依次入栈了(即依次进入队列Q1),这时如果想模拟出栈操作,则需要将c出栈,因为在栈顶...
分类:
其他好文 时间:
2014-05-07 06:54:12
阅读次数:
466
封装了一个基于C++11的线程池对象。
异步执行的任务,从线程池中分配一个空闲的线程来执行该任务.
如果没有空闲的线程可以执行,则进入队列排队
task_pool_init(10);
for( int i = 0 ; i < 200 ; i ++ )
{
run_job([i]{
std::this_thread::sleep_for(std::chrono::seconds(1));
});
}
...........................
...
分类:
编程语言 时间:
2014-05-06 23:16:37
阅读次数:
378
要求:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印。算法思想:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直到队列中所有的结点都被打印出来为止。
分类:
其他好文 时间:
2014-05-05 10:00:38
阅读次数:
307
题目给了一个满足最大流的残量网络,判断是否费用最小。如果残量网络中存在费用负圈,那么不是最优,在这个圈上增广,增广1的流量就行了。1.SPFA中某个点入队超过n次,说明存在负环,但是这个点不一定在负环上。2.这个负环可能包括汇点t,所以构建残量网络的时候也要考虑防空洞到t上的容量。//#pragma...
分类:
其他好文 时间:
2014-05-03 23:12:12
阅读次数:
377
题意:
给定n长的数组(下标从1-n)(n个人的身高,身高各不相同
问:对于第i个人,他能看到的左边最矮的人下标。(如果这个最矮的人被挡住了,则这个值为0)
还有右边最高的人下标,同理若被挡住了则这个值为0
输出n行,每个人左右2边的下标。
单调队列,对于 front - rear 的队列(注意出队都是在rear,入队也是在rear)
当加入元素x,若这队列是单调递增的,显然q.fro...
分类:
其他好文 时间:
2014-05-01 17:21:43
阅读次数:
429
【环境】CENTOS6.3 +
wdcp(php5.3)【症状】可正常加入队列,但不执行队列【原因】大部份都是用户权限造成【原理】
Ecstore2.0的导入导出、发送邮件、日常清理备份等任务操作,都通过用入任务队列,然后采用LINUX的CRON任务调试定时来执行并清空队列。【方法】
第一步:测.....
分类:
其他好文 时间:
2014-04-30 15:23:24
阅读次数:
2797
网络代码处理输入分组用的是异步和中断驱动的方式。首先,一个设备中断引发接口层代码执行,然后它产生一个软中断
引发协议层代码执行。当内核完成这些级别的中断后,执行插口代码。当内核完成这些级别的中断后,执行插口代码。
在这里给每个硬件和软件中断分配一个优先级。如下图:
对于不同优先级,一个要关心的问题就是如何处理那些在不同级别的进程共享的数据结构。例如,当IP输入例程正在从它的
输入队...
分类:
其他好文 时间:
2014-04-29 13:48:22
阅读次数:
429