队列是一种常用的数据结构,它跟栈一样,操作都受到限制,队列只允许从一端进数据,另一端出数据。队列跟栈不同,栈是一种“后进先出”的模式,而队列是一种“先进先出”的操作模式。就好比日常排队一样,先排队的先出,后排队的后出。例如,进入队列的顺序是1,2,3,4,5则出队列..
分类:
其他好文 时间:
2016-02-29 00:48:24
阅读次数:
227
环形无锁队列环形无锁队列Table of Contents1 环形无锁队列的实现2 死锁及饥饿3 一些优化1 环形无锁队列的实现数据结构定义:template class LockFreeQueue{ private: ElementT *mArray; int mCapacity; ...
分类:
其他好文 时间:
2015-12-02 00:57:08
阅读次数:
178
双端队列支持线程安全,在两端任何一端执行添加和删除,时间复杂度为o(1)。访问两端的索引访问,时间复杂度为o(1)。访问中间元素时间复杂度为o(n)。随机访问还是采用列表列表:时间复杂度为o(n)双端队列的实现:class Deque:# 模拟双端队列def __init__(self):self....
分类:
其他好文 时间:
2015-11-24 21:09:45
阅读次数:
188
上一篇文章里说到了一个极简易队列的实现,然而它对于并发存在一个问题,就是当多个或者说就是两个线程并发地访问队列,分别调用 push() 与 tryPop() 时,可能就会导致数据争用或者死锁。以下是一种思路,通过分离数据允许并发。其大致思路是预先分配一个不储存任何数据的结点占位,当 push() 进...
分类:
其他好文 时间:
2015-09-24 19:22:21
阅读次数:
255
本文是针对数据结构基础系列网络课程(3):栈和队列的实现项目。【项目 - 后缀表达式】 利用sqstack.h中栈的基本运算,实现将一个中缀表达式转换为对应的后缀表达式的算法。例如,输入(56-20)/(4+2),输出后缀表达式::56#20#-4#2#+/要求在数字后加#。参考解答说明: 原理见视频 栈的应用1-表达式求值,还可以参考表达式求值的源码
基于栈结构,将中缀表达式转换为后缀表...
分类:
其他好文 时间:
2015-09-20 13:21:45
阅读次数:
189
本文是针对数据结构基础系列网络课程(3):栈和队列的实现项目。【项目 - 数制转换】 把十进制的整数转换为任一进制数输出。请利用栈设计算法,并实现程序。
提示:要转换为r进制,则原来的数逐次除以基数r(除完之后用商再除),直到商为0,得到的一系列余数的逆序就是转换结果。这里的“逆序”,意味着后产生的余数,会先输出,后进先出,栈的机会来了……
[参考解答]解法:头文件sqstack.h请见[顺序栈...
分类:
其他好文 时间:
2015-09-20 08:09:12
阅读次数:
185
转自:http://coolshell.cn/articles/8239.html关于无锁队列的实现,网上有很多文章,虽然本文可能和那些文章有所重复,但是我还是想以我自己的方式把这些文章中的重要的知识点串起来和大家讲一讲这个技术。下面开始正文。关于CAS等原子操作在开始说无锁队列之前,我们需要知道一...
分类:
其他好文 时间:
2015-09-15 12:45:24
阅读次数:
439
写了个栈和队列以及简化的deque模版。Stack: 1 #ifndef _KIRAI_STACK 2 #pragma once 3 4 #include 5 6 namespace kirai { 7 template 8 struct Node { 9 ...
分类:
其他好文 时间:
2015-09-11 20:52:26
阅读次数:
231
关于无锁队列的实现,网上有很多文章,虽然本文可能和那些文章有所重复,但是我还是想以我自己的方式把这些文章中的重要的知识点串起来和大家讲一讲这个技术。下面开始正文。 关于CAS等原子操作 在开始说无锁队列...
分类:
其他好文 时间:
2015-09-06 11:18:19
阅读次数:
185