题意:一些具有拓扑序的节点需要染色,这些节点一共分为两类。问你按照给出的拓扑顺序染色完结点最少需要多少次切换。思路:我们按照拓扑排序的做法,建立两个栈分别存放两种不同种类的节点,每次把一个栈中的所有节点都处理完了才处理另一个,这样切换次数即为最终答案。代码如下: 1 /**************....
分类:
其他好文 时间:
2014-07-03 09:28:29
阅读次数:
169
对于一个给定的后缀表达式,(假设它是合法的)
注意:次算法是基于基本操作符是2元操作符且操作数为一位正整数!
其求值的基本思想是:对于给定的表达式进行遍历,如果遇到的是操作数就将其压入栈;如果遇到的是操作符,将栈顶的两个元素弹出,假设栈顶两个元素依次为a,b(a在上b在下),将次操作符应用于这两个栈顶元素,比如b-a(注意b在左a在右)然后将计算结果压入栈(用来充当下一个操作符的操作数);
...
分类:
其他好文 时间:
2014-07-02 08:31:22
阅读次数:
194
题目:用两个栈实现一个队列。队列的声明如下:请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
分析:
队列的特点是“先进先出”,而栈的特点是“先进后出”。要用两个栈来实现队列。用图分析如下:
程序代码如下:
#include
#include
#include
#ifndef ERROR
#define E...
分类:
其他好文 时间:
2014-07-02 08:00:24
阅读次数:
247
在上一篇优化后队列的实现(C语言实现) 中,虽然我们对队列的时间复杂度进行了优化,但是却让代码的可读性变差了,代码显得略微臃肿(当然,这些话你看看就好,主要是为了奉承这篇博文的)。
这里主要实现的是:利用栈来实现队列
基本思路:
1,创建两个栈
2,两个栈合并起来组装成一个队列,分别取名为instack,outstack,用于进队列,出队列
3,比如有1,2,3,4,5 需要进入队列,先将这一串数压入instack栈中,假设压入顺序为1,2,3,4,5(1为栈底),再将instack中的数据移入outst...
分类:
编程语言 时间:
2014-06-22 14:00:43
阅读次数:
257
这个算法也很简单,定义两个栈m_aStack、m_bStack,m_aStack负责push()数据,m_bStack负责front()数据。思路:每一次front()取数据都会检查一下m_bStack是否为空,为空则把m_aStack的所有数据pop()出来push()到m_bStack中。因为S...
分类:
其他好文 时间:
2014-06-18 10:56:23
阅读次数:
190
用上一篇文章的immutable stack 来实现 immutable queue.
其实就是用两个栈实现队列,就
{CSDN:CODE:395989}...
分类:
其他好文 时间:
2014-06-18 06:21:56
阅读次数:
201
题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和
deleteHead,分别完成队列尾部插入结点 和
队列头部删除结点AppendTail:直接将元素入栈stack1DeleteHead:当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素...
分类:
其他好文 时间:
2014-06-07 07:06:14
阅读次数:
232
栈与队列都是比较高级的数据结构,虽然不难,但有时有些问题也比较灵活,在《编程之美》与《剑指offer》上就有一些这样的题目。用队列模拟栈、用站栈模拟队列,以及现实队列与栈的最大值与最小值求解,这些都是基础的,只要理解栈的后进先出与队列的先进先出特点即可解决。
1、栈模拟队列
用两个栈,元素从一个栈stackA进入,从另一个栈stackB出来。进队列时直接添加到stackA,出队列时...
分类:
其他好文 时间:
2014-05-23 02:28:08
阅读次数:
213
题意:
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
思路:定义两个栈,一个用来记录数据的插入和删除,一个用来存储最小值的变化
代码如下:
template
class Stack
{
public:
Stack(int len=100);
T Min();
...
分类:
其他好文 时间:
2014-05-22 23:46:32
阅读次数:
359