65.9K
CodeProject 正在变化。 阅读更多。
Home

Dequeue - 也称为环形缓冲区

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.19/5 (21投票s)

2004 年 3 月 30 日

viewsIcon

69739

downloadIcon

1088

System.Collections 的又一个补充 - 环形缓冲区,比 ArrayList 或 Queue 更复杂。

引言

双端队列的意思是“双端队列”。 那些还记得美好的旧 STL 日子的人会确切地知道它是什么。 对于其他人:它是一个与 System.Collections 兼容的类,实现了一个队列,支持在两端进行 Enqueue 和 Dequeue 操作。

用法

主要函数(除了所有的 System.Collections 杂项之外)是

  • EnqueueHeadEnqueueTail 用于向 DQ 添加元素
  • DequeueHeadDequeueTail 用于从 DQ 取出元素
  • EnqueueHeadRangeEnqueueTailRange 用于将集合添加到 DQ(顺序保持不变)

DQ 允许枚举和索引访问。为此,您需要知道 DQ 的“头部”始终是索引为 0 的元素,尾部始终是索引为 (Count-1) 的元素。 枚举也是按此顺序进行的。

EnqueueHead/Tail- 和 DequeueHead/Tail- 操作的复杂度为 O(1),除非缓冲区需要增长,这将需要 O(n) 步(自然)。 因此,您可以看出该缓冲区比 ArrayList 更快,并且比 Queue 更灵活。

示例

Dequeue D = new Dequeue();
D.EnqueueTail("The");
D.EnqueueTail("big");
D.EnqueueTail("brown");
D.EnqueueTail("fox");
// now D is [The big brown fox ]
Dequeue D2 = new Dequeue();
D2.EnqueueHead("dog.");
D2.EnqueueHead("lazy");
D2.EnqueueHead("the");
D2.EnqueueHead("over");
D2.EnqueueHead("jumped");
// now D2 is [jumped over the lazy dog. ]
Dequeue D3 = new Dequeue();
D3.EnqueueTailRange(D2);
D3.EnqueueHeadRange(D);
// now D3 is [The big brown fox jumped over the lazy dog. ]

历史

  • 2004 年 3 月 30 日 - 插入。
© . All rights reserved.