//------------------------------队列----------------------------------------//
//队列与栈相反,是一种先进先出(FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素
//允许插入的一端叫做队尾(rear),允许删除的一端叫做队头(front)
//给链队列增加一个头结点,并令头指针指向头结点。空的链队列...
分类:
其他好文 时间:
2014-10-21 17:49:03
阅读次数:
299
有时候我有这样的需求:在一个程序的操作中我需要保存历史记录,或者存储一些信息;但我不希望这个数据在内存中是无限量增加的。简单的说,就是使用数组或者链表但是我不希望其无限量的增长,我只需要保存最近的20或者30条记录就ok,多了我不要。
就上面的需求来说,可能我们可以直接通过一定的方法对数组或者链表进行一定的操作(满了就删除第一个)就能实现对应的需求,当然也可以二次封装。...
分类:
编程语言 时间:
2014-10-20 17:25:26
阅读次数:
232
STL中所谓的双端队列的实现,从源码中可以一览其复杂性。...
分类:
编程语言 时间:
2014-10-12 01:20:27
阅读次数:
449
前面在《眉目传情之匠心独运的kfifo》一文中详细解析了 linux 内核并发无锁环形队列kfifo的原理和实现,kfifo鬼斧神工,博大精深,让人叹为观止,但遗憾的是kfifo为内核提供服务,并未开放出来。剑不试则利钝暗,弓不试则劲挠诬,鹰不试则巧拙惑,马不试则良驽疑,光说不练是不能学到精髓的,下面就动手实现自己的并发无锁队列UnlockQueue(单生产者单消费者)。...
分类:
其他好文 时间:
2014-10-11 19:11:36
阅读次数:
336
昨天完成了无锁队列的实现,然后思考了一下锁的原理,锁的核心无非是保证有一个变量需要被原子性地更新,比如,我们用一个bool x,表示锁,当我们获取锁的时候,我们需要保证的是锁能够只在同一时间被多个线程中的一个线程去读取和更新,在逻辑上有如下的代码:
bool GetLock(bool& x){
if(x){
x= false;
...
分类:
其他好文 时间:
2014-10-10 20:34:04
阅读次数:
198
类似于Java阻塞队列的实现:public class BlockingQueue { private List queue = new LinkedList(); private int limit = 10;//缓冲区大小 public BlockingQueue(int limit){...
分类:
编程语言 时间:
2014-10-09 02:34:37
阅读次数:
197
一、题目 编写支持双端队列的例程,插入与弹出操作均花费 O(1)时间二、解答 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的数据结构。 双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行。 基本操作:在双端队列两端插入与删除。 ADT...
分类:
其他好文 时间:
2014-10-06 01:44:29
阅读次数:
341
完整代码如下: 1 #include 2 #include 3 #include 4 using namespace std; 5 typedef int datatype; 6 const int maxsize = 100; 7 struct seqQueue 8 { 9...
分类:
其他好文 时间:
2014-09-29 20:14:11
阅读次数:
195
链队列,即队列的链式存储结构,它是仅在表头删除和表尾插入的单链表,因此一个链队列需要设置两个分别指示队头元素和队尾元素的指针,为了操作方便,给链队列添加一个头结点,并令队头指针指向头结点,由此,空的链队列的判断条件就是队头指针和队尾指针均指向头结点。
链队列的类型描述:
//链队列类型描述
typedef int QElemType;
typedef struct node{
QElemTy...
分类:
其他好文 时间:
2014-09-22 01:57:11
阅读次数:
189