目录
介绍
概念化这个混乱
使用这个混乱
兴趣点
- 下载Circular-master.zip-14.4 KB
微软.NET提供了一些基本的通用数据结构,例如Stack、Queue和LinkedList,但是没有循环缓冲器或循环队列(“双头”队列)。本课程旨在填补这一空白。
概念化这个混乱循环缓冲器可从容器的正面和背面快速push和pop。假设没有重新分配,则这些操作的时间复杂度为O(1) ,而其他插入和删除操作的时间复杂度为O(n) 。
这使缓冲区适合作为通用堆栈或队列。尽管Microsoft拥有堆栈或队列,但仍可能希望以这种方式使用这个类的原因是这个类允许按索引访问并完全实现IList。
使用这个混乱该类相对易于使用。大多数IList和ICollection接口成员都是显式的,因为它们的大多数操作都是O(n)而不是O(1。这意味着您必须转换为适当的接口才能完全访问其列表或集合成员。这是为了防止对数据结构的随意使用——它并不是主要用作列表类,而可以用作一个列表类。访问修饰符反映了这一点。
主要API由PushBack()/ PopBack()和PushFront()/ PopFront()组成 ,分别在容器的后面或前面添加和删除项目。也有一些更多的标准列表/集合成员如Contains()、IndexOf()、this[] 和Clear()
这是演示/测试代码的摘录:
Console.WriteLine("Adding 10 items");
for (var i = 0; i < 10; ++i)
list.PushBack(i + 1);
Console.Write("Enumerating "+ list.Count+" items:");
foreach (var item in list)
Console.Write(" " + item.ToString());
Console.WriteLine();
Console.WriteLine("Removing 1 item");
list.PopFront();
兴趣点
我真的受不了实现Insert(),尤其是在循环缓冲区上,如果有错误,可能在Insert()代码中。我不确定例程是否可以简化。有很多极端的情况。