最近在使用prior_queue实现图的Dijkstra算法和Prim,发现老是插入有bug,仔细研习之后突然发现有两点需要注意
1.如果优先队列里放的是自定义的类,在用重载比较符的时候要严格定义:
if (a
then ( a==b ) is false;
2.如果在不插入或者删除队列中节点的时候,却要修改某个节点中key的值,切记不可以直接修改其 key
解决方案1:全部出队,修改...
分类:
其他好文 时间:
2014-09-24 21:58:18
阅读次数:
178
栈的基本操作包括入栈push和出栈pop,栈有一个栈顶指针top,指向最新如栈的元素,入栈和出栈操作操作都是从栈顶端进行的。
队列的基本操作包括入队enqueue和出队dequeue,队列有队头head和队尾tail指针。元素总是从队头出,从队尾入。采用数组实现队列时候,为了合理利用空间,可以采用循环实现队列空间的有效利用。
关于栈和队列的基本操作如下图所示:
采用数组简单实现一下栈...
分类:
其他好文 时间:
2014-09-22 01:16:21
阅读次数:
499
昨天研究了链队列的入队操作,那么现在再来看看链队列的出队操作吧。出队操作时,就是头结点的后继结点出队,将头结点的后继改为它后面的结点,若链表除头结点外只剩一个元素时,则需将rear指向头结点。还是画个图理解一下吧。一般情况下,链队列的出队图示:老品牌娱乐城如果链队列只剩下一个元素的时候,出队则如下图...
分类:
其他好文 时间:
2014-09-19 15:33:35
阅读次数:
376
对于循环队列与链队列的比较,可以从两方面来考虑:纽约娱乐城从时间上,其实它们的基本操作都是常数时间,即都为0(1)的,不过循环队列是事先申请好空间,使用期间不释放,而对于链队列,每次申请和释放结点也会存在一些时间开销,如果入队出队频繁,则两者还是有细微差异。对于空间上来说,循环队列必须有一个固定的长...
分类:
其他好文 时间:
2014-09-19 15:28:45
阅读次数:
525
让我们考虑更复杂的一种场景:产品是各不相同的。这时只记录一个数量就不够了,还需要记录每个产品的细节。很容易想到需要用一个容器将这些产品记录下来。Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列 LifoQueue,和优先级...
分类:
编程语言 时间:
2014-09-05 09:56:31
阅读次数:
251
这题想了好久才弄懂,首先题意是要求最先出队且获得的糖果数最多的人,所以只需要在循环中每次判断此时出队的人获得的糖果数是否比别人多
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using...
分类:
其他好文 时间:
2014-09-03 11:16:06
阅读次数:
150
循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"还是"满"。解决这个问题的方法至少有三种:① 另设一布尔变量以区别队列的空和满;② 少用一个元素的空间。约定入队前,测试尾指针在循环意义下...
分类:
其他好文 时间:
2014-08-30 21:40:40
阅读次数:
419
给定一列数(未排序)和一个目标值, 找出所有可能的组合和等于目标值的组合, 数组中的数可以重复使用.算法思路: 使用递归.对数组排序, 从小到大;令i = 起始下标(初始为0), 对于每一个数, 如果它等于目标值, 则在缓存结果中加入此数并将缓存结果加入输出队列, 随后在缓存结果中删除此数; 如.....
分类:
其他好文 时间:
2014-08-29 18:09:08
阅读次数:
138
使用两个栈实现一个队列
队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO),
用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈,
出队列则将第一个栈的数据依次压入第二个栈,然后出栈.
两条规则:
1)进队列,则直接压入第一个栈
2)出队列,若果第二个栈不为空,直接pop(),如过第二个栈为空,
则把第一个栈中的数据全部压入第二个栈(第一个栈此时为空...
分类:
其他好文 时间:
2014-08-27 01:40:37
阅读次数:
230
题意:队列中有小团体(队列)。当入队时,如果有该团体的元素在队列中,则新元素排到该团体的尾部,否则排到队列的尾部。出队时和正常的一样,队首元素出列。
思路:这个用STL很好模拟,用纯C的话,很直接会想到用二维数组来做,每个团体是其中的一个一维数组,最多再开一个数组来对小团体编号进行排队。但是当时没有看到题目中说的每个团体最后有1000个元素,这样的话我以为要开1000X200000的数组,忒大了...
分类:
其他好文 时间:
2014-08-25 13:24:34
阅读次数:
179