C#中的通用循环缓冲区

目录

介绍

概念化这个混乱

使用这个混乱

兴趣点


介绍

微软.NET提供了一些基本的通用数据结构,例如Stack<T>Queue<T>LinkedList<T>,但是没有循环缓冲器或循环队列(双头队列)。本课程旨在填补这一空白。

概念化这个混乱

循环缓冲器可从容器的正面和背面快速pushpop。假设没有重新分配,则这些操作的时间复杂度为O(1) ,而其他插入和删除操作的时间复杂度为O(n) 

这使缓冲区适合作为通用堆栈或队列。尽管Microsoft拥有堆栈或队列,但仍可能希望以这种方式使用这个类的原因是这个类允许按索引访问并完全实现IList<T> 

使用这个混乱

该类相对易于使用。大多数IList<T>ICollection<T>接口成员都是显式的,因为它们的大多数操作都是O(n)而不是O(1。这意味着您必须转换为适当的接口才能完全访问其列表或集合成员。这是为了防止对数据结构的随意使用——它并不是主要用作列表类,而可以用作一个列表类。访问修饰符反映了这一点。

主要APIPushBack()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()代码中。我不确定例程是否可以简化。有很多极端的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值