目录

介绍

使用代码


  • 下载源代码7.5 KB

介绍

Microsoft提供了一个Queue<T>类,但是尽管被排序,但它不提供对其元素的索引访问。由于我需要一个允许按索引有效访问的缓冲区,因此我在由数组支持的可增长循环缓冲区上重新实现了一个队列。这类似于Microsoft的实现方式。我的主要区别是我的功能更多。该类是非常专业的,但是当您需要它时,您确实需要它,所以我在这里提供它。我在回溯解析器中使用它来支持超前缓冲区。

注意:我最初叫这个Queue<T>是因为这是它最好的名字,但我更改了它以避免与微软的队列冲突。项目名称和文件夹名称反映了旧名称,但是类和源文件已用新名称更新。

使用代码

使用代码与使用Microsoft的Queue<T>代码完全一样,但增加了indexer属性。我之所以没有实现IList<T>,是因为实现Insert()不是一件容易的事,到那时,容器实际上在功能上变成了一个双端队列,这是一个完全不同的数据结构。最终,我可以发布一个。

演示代码很容易自解释:

var q = new IndexedQueue<int>(1);
Console.WriteLine("Enqueuing 1..20");
for (var i = 0; i < 20; ++i)q.Enqueue(i + 1);Console.WriteLine("Dequeuing 1..10");
for (var i = 0; i < 10; ++i)Console.Write("{0} ",q.Dequeue());
Console.WriteLine();Console.WriteLine("Enqueuing 21..40 (force array wrap)");
for (var i = 0; i < 20; ++i)q.Enqueue(i + 21);Console.WriteLine("Enumerating");
foreach (var i in q)Console.Write("{0} ", i);
Console.WriteLine();Console.WriteLine("Removing 34 (middle of array)");
(q as System.Collections.Generic.ICollection<int>).Remove(34);Console.WriteLine("Enumerating");
foreach (var i in q)Console.Write("{0} ", i);
Console.WriteLine();Console.WriteLine("Removing 32 (end of array)");
(q as System.Collections.Generic.ICollection<int>).Remove(32);Console.WriteLine("Enumerating");
foreach (var i in q)Console.Write("{0} ", i);
Console.WriteLine();

实现起来相当简单,但是从中间删除(对于ICollection<T>)有点棘手。

无论如何,如果您需要它,就在这里。大多数人可能永远不会,但你去吧。

IndexedQueueT——C#中的自定义队列相关推荐

  1. 自定义队列(优化了数组固定长度的弊端)以及集合中的一些重点内容

    java中的数组在声明的的时候都会要求输入数组的的大小,有的时候在事先会不知道要加入的东西的大小,那我们怎么定义数组的大小呢,定多大合适呢,这就成为一个难题.其实Java中的集合会解决这个问题,但它是 ...

  2. 详解Yarn中三种资源调度器(FIFO Scheduler、Capacity Scheduler、Fair Scheduler)和配置自定义队列实现任务提交不同队列

    前言 在前面 Yarn的基本架构和作业提交全流程 一文中提到,当ResourceManager收到客户端Client的请求之后会将该作业job添加到(默认的)容量调度器中,然后再由某一个空闲的Node ...

  3. 在laravel5 中使用queue队列

    如何在laravel5 中使用queue队列 Laravel Queue是延迟处理应用程序中耗时任务的有效方法.此类任务的示例可能包括每当新用户在您的应用程序中注册或通过社交媒体分享帖子时发送验证电子 ...

  4. Python中的自定义进程和进程池

    Python中的自定义进程和进程池 文章目录 Python中的自定义进程和进程池 一.自定义进程 1.步骤: 2.例 进程池 1.概念 2.介绍--multiprocess.Pool 3.非阻塞式进程 ...

  5. android自定义队列,Android 消息机制(一)消息队列的创建与循环的开始 Looper与MessageQueue...

    写在前面 本文基于Android 7.1.1 (API 25)的源码分析编写 与之前的触摸事件分发机制分析的文章一样,Android系统机制的分析中关键的一环就是事件消息的处理.之前也说过,Andro ...

  6. 如何在ASP.NET Core中编写自定义日志记录提供程序

    目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...

  7. Java中的锁---队列同步器

    2019独角兽企业重金招聘Python工程师标准>>> Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源.Lock接口在使用时需 ...

  8. 用js写出数据结构中的自定义队列,利用队列思想写出一个击鼓传花的游戏函数,优先级队列

    队列的核心是先进先出 1.用js写出数据结构中的自定义队列 class Queue{constructor(){this.item = [];}// 1.入队enqueue(ele){this.ite ...

  9. 自主数据类型:在TVM中启用自定义数据类型探索

    自主数据类型:在TVM中启用自定义数据类型探索 介绍 在设计加速器时,一个重要的决定是如何在硬件中近似地表示实数.这个问题有一个长期的行业标准解决方案:IEEE 754浮点标准.1.然而,当试图通过构 ...

最新文章

  1. redis在微服务领域的贡献
  2. 各种排序算法的JAVA实现
  3. linux怎么命令设置网络连接,Linux网络操作命令
  4. 更改c语言程序保存地址吗,C语言文本文件实现局部修改
  5. 《机器学习》课程视频(数据处理、模型构建与优化)
  6. access工具_工具篇之pycharm小技巧-httpclient
  7. PL/SQL developer快速执行选定语句
  8. Android WiFi 获取 IP 过程
  9. BGP 路由策略-路由汇总基础及其应用
  10. 暗影精灵4 i5-8300H 核显驱动完美触控板声音亮度调节电池电量显示黑苹果EFI引导
  11. PyTorch安装及试用 基于Anaconda3
  12. arcgis 10 扩展模块授权无效的解决方法
  13. 5G NR MCG,SCG,PCell,PSCell,SCell,sPCell 概念
  14. 多线程---详解各种锁和AQS原理
  15. Windows——matplotlib添加中文字体
  16. 解决bug问题,查找bug的方法
  17. 【听】百年孤独,拉丁美洲悲剧奋斗史
  18. TestStand中,ProcessSetup中的fileGlobal没有传递到MainSequence中
  19. mysql 数据泵_数据泵导出/导入数据
  20. 凯撒密码的原理以及实现

热门文章

  1. android os跑电量咋关,android 优化耗电量
  2. 网页不够惊艳?优秀案例给你灵感
  3. mysql 实现计数器_MySQL实现计数器的表设计及实现
  4. qwt需要添加到qcreator的东西
  5. Linux网络协议栈:中断下半部处理
  6. nginx documentation | Development guide
  7. Python基础学习思维导图
  8. 一个O-RAN YANG语言文件:o-ran-interfaces.yang
  9. android sqlcipher 加密,Android 数据库加密 SQLCipher使用方法
  10. instr函数 mysql_mysql数据库中查找字串出现的位置instr函数