并行类队列数据结构及数组与链表对比解析
1. 类队列数据结构基础实现
在实现栈、队列和双端队列时,循环数组是一种常用的数据结构。为了便于区分满队列和空队列,通常会预留数组的一个元素为空。循环数组还支持随机访问操作 [·] ,其操作定义为: Operator [i : N] : Element; return b[i + h mod (n + 1)] 。有界队列和双端队列可以采用类似无界数组的技术将其变为无界结构。
这里有两个相关的练习题值得思考:
- 练习题3.31(数组列表) :目标是开发一种简单的数据结构,用于栈、FIFO队列和双端队列,它要结合列表和无界数组的优点,并且在空间效率上优于两者。可以使用一个列表(对于双端队列使用双向链表),其中每个项存储一个包含K个元素的数组(K为一个较大的常数)。然后用自己喜欢的编程语言实现该数据结构,并比较在大栈的情况下,它与链表和无界数组的空间消耗和执行时间。
- 练习题3.32(外部内存栈和队列) :设计一个栈数据结构,使其在特定的I/O模型中每个操作的I/O复杂度为O(1/B),只需要在内部内存中保留两个块。思考仅在内存中保留一个块的简单实现会出现什么问题。接着将该数据结构进行调整以实现FIFO队列,同样使用两个内部缓冲区块,再使用四个缓冲区块实现双端队列。
2. 并行类队列数据结构的挑战与应用场景
栈、队列和双端队列的所有操作都集中在一个或两个逻辑位置,这些位置可能成为并行处理的瓶颈,因此在使用类队列数据结构时需要谨慎。不过,在某些情况下,它们不仅是必要的
超级会员免费看
订阅专栏 解锁全文
855

被折叠的 条评论
为什么被折叠?



